2011-01-27 2 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.

Рекурсивное решение. Это можно сделать более элегантно, используя программирование функционального стиля. Это полагается на 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

вар корень = $ ("# корень «) [0]; var nodeList = []; функция appendChildren (узел, массив) {если ( node.hasChildNodes()) { для (вар я = 0; г Nilesh

+0

Работал как шарм и спасал мое время. –

-3

getAllChildren: Функция (Fromnode) { , если (fromNode.hasChildren()) { для (вар к в fromNode.children) { , если (Fromnode .children [k] .hasChildren()) { КатегорияMaster.getAllChildren (fromNode.children [k]); } nodeList.push (fromNode.children [k]); }} },

1

Вы можете получить корневой узел: уаг корень = 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; 

     } 
    } 

}

Сделать вышеуказанную функцию рекурсивный и там вы идете !! Bingo

Смежные вопросы