2011-01-27 4 views
1

주어진 노드의 모든 자식을 YUI treeview에 원합니다. 조건은 하위 하위 하위 항목이있는 경우 하위 하위 하위 항목이 필요하다는 것입니다. 하위 노드를 포함하여 주어진 노드의 모든 하위 노드입니다.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.

재귀적인 해결책. 이것은 기능적 스타일 프로그래밍을 사용하여보다 우아하게 할 수 있습니다. 이것은 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

+0

VAR 루트 = $ ("# 루트 ") [0]; var nodeList = []; 함수 appendChildren (노드 어레이) { 경우 (node.hasChildNodes())에 대한 { VAR (I = 0; i가 node.children.length를 <; 내가 ++) { 경우 (node.children [I]를 .hasChildNodes()) { array.push (node.children [i]); } appendChildren (node.children [i], array); } } } appendChildren (root, nodeList); – Nilesh

+0

매력처럼 일하고 내 시간을 저장했습니다. –

-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 (루트);

그럼 당신은

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; 

     } 
    } 

}

재귀 위의 기능을 확인 자식 얻을 수 있습니다 거기로 가고!

관련 문제