JsTreeに存在するすべてのノードを取得するにはどうすればよいですか?
私はxmlでjsTreeを構築しています
Root
-----A
-----A1
-----A1.1
-----A1.2
-----A2
-----`A2.1`
-----A2.2
-----B
-----B1
-----B2
-----C
-----C1
-----C1.1
-----C2.2
JsTreeに存在するすべてのノード(ID)の配列は次のとおりです
期待される出力:[ルート、A、A1、A1.1、A1.2、A2、A2.1、A2.2、B、B1、B2、C、C1、C1.1、C2.2]
例を挙げた解決策:)
var xmlString = $("#tree").jstree("get_xml");
var xmlDOM = $.parseXML(xmlString);
var IDList =[];
var items = $(xmlDOM).find('root item');
$.each (items, function(key, val){
IDList.Push($(val).attr('id'));
})
IDList.pop();
xmlString =
<root>
<item id="A" parent_id="0" state="close">
<content><name>Charles Madigen</name></content>
</item>
<item id="A1" parent_id="A" state="close">
<content><name>Charles Madigen</name></content>
</item>
.
.
</root>
出力:ルート、A、A1、A1.1、A1.2、A2、A2.1、A2.2、B、B1、B2、C、C1、C1.1、C2.2
:)
次の方法で、各ノード要素をトラバースし、そのIDを配列に入れることができます。
var idList = [];
var jsonNodes = $('#tree').jstree(true).get_json('#', { flat: true });
$.each(jsonNodes, function (i, val) {
idList.Push($(val).attr('id'));
})
var treeData = $('#MyTree').jstree(true).get_json('#', {flat:false})
// set flat:true to get all nodes in 1-level json
var jsonData = JSON.stringify(treeData );
Get_xmlがjstree3で利用できなくなったので、同じことが必要で、以下の解決策を思いつきました。
function get_jstree_order(root_ul_selector, children) {
var output = [];
var _this = this;
if (typeof children === 'undefined') {
children = $(root_ul_selector).find('> li');
}
children.each(function() {
if ($(this).find('ul').length > 0) {
output.Push({
id: $(this).attr('id'),
children: get_jstree_order(root_ul_selector, $(this).find('ul > li'))
});
return;
}
output.Push({
id: $(this).attr('id'),
children: false
})
});
return output;
}
console.log(get_jstree_order('#mytree > ul'));
出力(読みやすくするためにJSONに変換):
[
{
"id": "1",
"children": false
},
{
"id": "2",
"children": false
},
{
"id": "5",
"children": [
{
"id": "6",
"children": false
},
{
"id": "7",
"children": false
}
]
},
{
"id": "8",
"children": false
},
{
"id": "9",
"children": false
},
{
"id": "10",
"children": false
},
{
"id": "11",
"children": false
}
]
必要に応じて変更します。必要なものを含めるためですが、私の目的は、サーバー側の処理のためにアイテムの正しい順序を取得することだけでした。
子IDが親から独立している場合は、遅延読み込みで問題ありません(たとえば、親の最初の子は常に1から始まります)