2011-01-27 9 views
1

与えられたノードのすべての子ノードをYUIツリービューに入れたい。条件は、子供がサブチャイルドを持っている場合、サブサブチャイルドが欲しいということです。それはサブクラスを含む与えられたノードのすべての子です。YUIのツリービューですべての子ノードを取得する方法

私は再帰がこの問題の解決策であるかもしれないと思います。誰も私を助けてくれます。

私の現在のコードは、このコードにより、

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

再帰的な解決策。これは、機能スタイルプログラミングを使用して、よりエレガントに行うことができます。これはクロスブラウザ.reduceの実装のためにunderscore.jsに依存しています。新しいブラウザをターゲットにしている場合は、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); 

これをテスト/デバッグするには、しばらくお待ちください。

IはjQueryオプション

var array = $(root).find("*").toArray()

+0

確認ビンゴ、と感謝 – Nilesh

+0

VARルート= $( "#ルート")[0]; var nodeList = []; 関数appendChildren(ノード、アレイ){ IF(node.hasChildNodes()){ ため(VAR i = 0; iはnode.children.lengthを<; Iは++){ (node.children [I] .hasChildNodes場合()){ array.push(node.children [i]); } appendChildren(node.children [i]、array); } } } appendChildren(root、nodeList); – Nilesh

+0

チャームのように働き、時間を節約しました。 –

-3

getAllChildren忘れ:関数(fromNode)(fromNode.children中のvar k)に対する{ IF(fromNode.hasChildren()){{ IF(fromNodeを.children [k] .hasChildren()){ CategoryMaster.getAllChildren(fromNode.children [k]); } nodeList.push(fromNode.children [k]); }} }、

1

あなたは、ルートノード取得することができます: VARルートを= 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; 

     } 
    } 

}

は再帰上記の関数を作成し、その子を得ることができ、そこにあなたが行く!!