如何让所有节点都出现在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)的数组如下
预期输出:[Root,A,A1,A1.1,A1.2,A2,A2.1,A2.2,B,B1,B2,C,C1,C1.1,C2。 2]
答案 0 :(得分:13)
.get_json ( node , li_attr , a_attr )
此函数返回转换回JSON的树节点数组。
有关this doc中相同功能的更多信息:
此函数遍历整个树并将其导出为JSON。参考 执行数据源部分以查看输出的格式。
如果指定节点作为第一个参数,则只指定该节点及其节点 孩子被包括在出口中,否则整棵树都是 导出。
只是搜索,你会发现! :)
答案 1 :(得分:5)
解决方案示例:)
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>
输出:Root,A,A1,A1.1,A1.2,A2,A2.1,A2.2,B,B1,B2,C,C1,C1.1,C2.2 < /强>
<强>:)强>
答案 2 :(得分:3)
您可以遍历每个节点元素并通过以下方式将其ID放入数组中:
var idList = [];
var jsonNodes = $('#tree').jstree(true).get_json('#', { flat: true });
$.each(jsonNodes, function (i, val) {
idList.push($(val).attr('id'));
})
答案 3 :(得分:1)
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 );
答案 4 :(得分:0)
我需要做同样的事情,并提出了以下解决方案,因为jstree3中不再提供get_xml
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开始)