如何在YUI的树视图中获取所有子节点

时间:2011-01-27 12:19:20

标签: javascript yui

我想要YUI treeview中给定节点的所有子节点。条件是,如果孩子有子孩子,那么我想要子子孩子。这是给定节点的所有子节点,包括子节点。

我认为递归可能是这个问题的解决方案。任何人都可以帮我解决这个问题。

我目前的代码是

if(curNode.hasChildren()) {
  for(var child = 0; child < curNode.children.length;child++) {
    alert(curNode.children[child].label);
   }
}

通过这段代码,我只得到给定节点的子节点而不是子子节点。

3 个答案:

答案 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]);                     }                 }             },