как получить весь дочерний узел в виде дерева YUI - PullRequest
1 голос
/ 27 января 2011

Я хочу, чтобы все дочерние элементы данного узла в древовидной структуре YUI. Условие состоит в том, что если у ребенка есть дочерние элементы, то я хочу подчиненного дочернего элемента. это все дочерние элементы данного узла, включая дочерних.

Я думаю, что рекурсия может быть решением этой проблемы. Может кто-нибудь помочь мне с этим.

Мой текущий код

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

По этому коду я получаю только дочерние узлы данного узла, но не дочерние узлы дочерних узлов.

Ответы [ 3 ]

1 голос
/ 18 января 2012

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

         }
     }

}

Сделайте вышеупомянутую функцию рекурсивной и все готово !! Bingo

1 голос
/ 27 января 2011
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);

Проверено здесь .

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

getAllChildren: function (fromNode) { if (fromNode.hasChildren ()) { for (var k in fromNode.children) { if (fromNode.children [k] .hasChildren ()) { CategoryMaster.getAllChildren (fromNode.children [K]); } nodeList.push (fromNode.children [K]); } } },

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...