我想要YUI treeview中给定节点的所有子节点。条件是,如果孩子有子孩子,那么我想要子子孩子。这是给定节点的所有子节点,包括子节点。
我认为递归可能是这个问题的解决方案。任何人都可以帮我解决这个问题。
我目前的代码是
if(curNode.hasChildren()) {
for(var child = 0; child < curNode.children.length;child++) {
alert(curNode.children[child].label);
}
}
通过这段代码,我只得到给定节点的子节点而不是子子节点。
答案 0 :(得分:1)
var root = $("#root")[0];
var nodeList = [];
function appendChildren(node, array) {
if (node.hasChildNodes()) {
for (var i = 0; i < node.children.length; i++) {
if (node.children[i].hasChildNodes()) {
appendChildren(node.children[i], array);
array.push(node.children[i]);
}
}
}
}
appendChildren(root, nodeList);
经过测试here。
递归解决方案。使用功能样式编程可以更优雅地完成此操作。这个依赖underscore.js进行跨浏览器.reduce
实施。如果您定位较新的浏览器,则可以依赖array.reduce。
function nodeToChildren(node) {
if (node.hasChildren()) {
_.reduce(node.children, function (memo, val) {
return memo.concat(nodeToChildren(val));
}, [].concat(node));
} else {
return node;
}
}
var array = nodeToChildren(root);
给我一些时间来测试/调试它。
我忘记了jQuery选项
var array = $(root).find("*").toArray()
答案 1 :(得分:1)
您可以获取根节点: var root = tree.getRoot(); tree_traversal(根);
然后你可以得到它的孩子
function tree_traversal(node){
if(node.hasChildren) {
var nodes = node.children;
for(var i = 0; i < nodes.length; i++) {
var test_node = nodes[i];
var label = test_node.label;
}
}
}
使上述函数递归,然后你去!宾果
答案 2 :(得分:-3)
getAllChildren:function(fromNode){ if(fromNode.hasChildren()){ for(var in inNode.children){ if(fromNode.children [k] .hasChildren()){ (fromNode.children [K])CategoryMaster.getAllChildren; } nodeList.push(fromNode.children [K]); } } },