jstree jquery如何遍历所有节点
jstree jquery how to iterate through all nodes
我正在尝试遍历 jstree 中树视图中的每个节点。树视图有 4 层深,但我似乎无法超过第一层。下面是用来迭代的jQuery
$("#myTree").bind('ready.jstree', function (event, data) {
$('#myTree li').each(function () {
// Perform logic here
}
});
});
Here 是一个说明我观点的 jsfiddle。请帮助我如何遍历 jstree 中的每个节点。
这会为您的 .each
循环获取树的所有子级。
$("#tree").bind('ready.jstree', function(event, data) {
var $tree = $(this);
$($tree.jstree().get_json($tree, {
flat: true
}))
.each(function(index, value) {
var node = $("#tree").jstree().get_node(this.id);
var lvl = node.parents.length;
var idx = index;
console.log('node index = ' + idx + ' level = ' + lvl);
});
});
另一种方法是在尝试访问 dom 中的节点之前打开它们,然后关闭它们:
$("#tree").bind('ready.jstree', function (event, data) {
$(this).jstree().open_all(); // open all nodes so they are visible in dom
$('#tree li').each(function (index,value) {
var node = $("#tree").jstree().get_node(this.id);
var lvl = node.parents.length;
var idx = index;
console.log('node index = ' + idx + ' level = ' + lvl);
});
$(this).jstree().close_all(); // close all again
});
"Nodes" 是一个重载的术语。您是指 HTML 节点还是仅用于定义 jstree 中每个节点的 JSON 数据?我需要遍历 jstree 以提取每个 jstree 节点中 ID 字段的值。如果这就是您所需要的,还有一个更简单的方法:
var v =$("#tree").jstree(true).get_json('#', {'flat': true});
for (i = 0; i < v.length && i < 10; i++) {
var z = v[i];
alert("z[id] = " + z["id"]);
}
我想要一种遍历 jsTree 节点的库方式,所以我将其写入 jstree.js
文件:
each_node: function(callback) {
if (callback) {
var id, nodes = this._model.data;
for (id in nodes) {
if (nodes.hasOwnProperty(id) /*&& id !== $.jstree.root*/) {
callback.call(this, nodes[id]);
}
}
}
},
(注意:我使用的是 jsTree 3.3.4,并且我在 3712
行的 get_json
之后插入了上面的代码函数定义。)
在代码中,我可以像这样遍历树的节点:
$("#myTree").jstree(true).each_node(function (node) {
// 'this' contains the jsTree reference
// example usage: hide leaf nodes having a certain data attribute = true
if (this.is_leaf(node) && node.data[attribute]) {
this.hide_node(node);
}
});
var jsonNodes = $('#jstree').jstree(true).get_json('#', { flat: true });
$.each(jsonNodes, function (i, v) {
if (true) {
// Following line will hide the check box on some condition
// $("#" + v.id + "_anchor i.jstree-checkbox").toggle(false);
// it will print the id
console.log(v.id);
}
});
我正在尝试遍历 jstree 中树视图中的每个节点。树视图有 4 层深,但我似乎无法超过第一层。下面是用来迭代的jQuery
$("#myTree").bind('ready.jstree', function (event, data) {
$('#myTree li').each(function () {
// Perform logic here
}
});
});
Here 是一个说明我观点的 jsfiddle。请帮助我如何遍历 jstree 中的每个节点。
这会为您的 .each
循环获取树的所有子级。
$("#tree").bind('ready.jstree', function(event, data) {
var $tree = $(this);
$($tree.jstree().get_json($tree, {
flat: true
}))
.each(function(index, value) {
var node = $("#tree").jstree().get_node(this.id);
var lvl = node.parents.length;
var idx = index;
console.log('node index = ' + idx + ' level = ' + lvl);
});
});
另一种方法是在尝试访问 dom 中的节点之前打开它们,然后关闭它们:
$("#tree").bind('ready.jstree', function (event, data) {
$(this).jstree().open_all(); // open all nodes so they are visible in dom
$('#tree li').each(function (index,value) {
var node = $("#tree").jstree().get_node(this.id);
var lvl = node.parents.length;
var idx = index;
console.log('node index = ' + idx + ' level = ' + lvl);
});
$(this).jstree().close_all(); // close all again
});
"Nodes" 是一个重载的术语。您是指 HTML 节点还是仅用于定义 jstree 中每个节点的 JSON 数据?我需要遍历 jstree 以提取每个 jstree 节点中 ID 字段的值。如果这就是您所需要的,还有一个更简单的方法:
var v =$("#tree").jstree(true).get_json('#', {'flat': true});
for (i = 0; i < v.length && i < 10; i++) {
var z = v[i];
alert("z[id] = " + z["id"]);
}
我想要一种遍历 jsTree 节点的库方式,所以我将其写入 jstree.js
文件:
each_node: function(callback) {
if (callback) {
var id, nodes = this._model.data;
for (id in nodes) {
if (nodes.hasOwnProperty(id) /*&& id !== $.jstree.root*/) {
callback.call(this, nodes[id]);
}
}
}
},
(注意:我使用的是 jsTree 3.3.4,并且我在 3712
行的 get_json
之后插入了上面的代码函数定义。)
在代码中,我可以像这样遍历树的节点:
$("#myTree").jstree(true).each_node(function (node) {
// 'this' contains the jsTree reference
// example usage: hide leaf nodes having a certain data attribute = true
if (this.is_leaf(node) && node.data[attribute]) {
this.hide_node(node);
}
});
var jsonNodes = $('#jstree').jstree(true).get_json('#', { flat: true });
$.each(jsonNodes, function (i, v) {
if (true) {
// Following line will hide the check box on some condition
// $("#" + v.id + "_anchor i.jstree-checkbox").toggle(false);
// it will print the id
console.log(v.id);
}
});