JsTree如何获取选中根节点的所有子级及子同级节点ID?
解决jstree获取根节点下所有层级子节点ID的问题
我在用jstree绘制部门树形结构时遇到个问题:点击根节点时,现在的代码只能拿到它的直接子节点ID,但我需要获取这个根节点下所有层级的子节点ID。目前我的代码是这样的:
var currentNode = $("#jstree").jstree("get_selected"); var childrens = $("#jstree").jstree("get_children_dom", currentNode); for (var i = 0; i < childrens.length; i++) { alert(childrens[i].id); }
别发愁,jstree本身就有现成的方法帮你搞定这个需求,不用自己写递归遍历。下面给你两种简单可行的解决方案:
方案一:用get_descendants获取所有后代节点
这个方法会直接返回选中节点下所有层级的后代节点DOM对象,遍历它们就能轻松拿到每个节点的ID:
// 先拿到选中的单个根节点(get_selected返回数组,取第一个元素) var currentNode = $("#jstree").jstree("get_selected")[0]; // 获取所有层级的后代节点 var allDescendants = $("#jstree").jstree("get_descendants", currentNode); // 遍历拿到每个节点ID allDescendants.forEach(function(node) { console.log(node.id); // 这里可以替换成你需要的操作,比如把ID存到数组里 });
方案二:直接用节点数据的children_d属性
如果你只需要所有子节点的ID集合,这个方法更高效——children_d属性本身就是选中节点下所有层级后代节点的ID数组:
// 获取选中节点的完整数据对象 var currentNodeData = $("#jstree").jstree("get_node", $("#jstree").jstree("get_selected")[0]); // 直接拿到所有层级子节点的ID数组 var allChildrenIds = currentNodeData.children_d; console.log(allChildrenIds); // 打印出来就是你要的所有ID啦
小提醒:get_selected返回的是一个数组,所以记得加[0]确保拿到单个选中的根节点,避免多选场景下出现异常哦。
内容的提问来源于stack exchange,提问作者Alazar Komar
相关产品推荐
相关产品推荐

