2011-01-27 82 views
1

我想要YUI treeview中給定節點的所有子節點。條件是,如果孩子有子女,那麼我想要子女。那就是給定節點的所有子節點,包括子節點。如何獲得YUI treeview中的所有子節點

我認爲遞歸可能是解決這個問題的方法。任何人都可以幫我解決這個問題。

我當前的代碼是

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

通過這個代碼,我只得到給定節點的兒童,而不是子子子節點。

回答

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()

+0

肯定,並感謝 – Nilesh 2011-01-27 13:09:28

-3

getAllChildren:功能(FROMNODE){ 如果(fromNode.hasChildren()){對於 (在fromNode.children VAR k)的{ 如果(FROMNODE .children [k] .hasChildren()){ CategoryMaster.getAllChildren(fromNode.children [k]); } nodeList.push(fromNode.children [k]); } } },

1

你可以得到根節點: VAR根= tree.getRoot(); tree_traversal(root);

然後你就可以得到它的孩子

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; 

     } 
    } 

}

作出上述函數的遞歸和你去那裏!賓果

相關問題