2012-07-16 6 views
5

Я использую jsTree jquery pluginjstree JQuery плагин - Получить все дочерние и субтропических дочерние узлы родительского

Я пытаюсь извлечь все узлы и вложенные узлы выбранного родителя. Но почему-то это не работает, если я не использую рекурсию. Есть ли лучший способ, свойственный jsTree?

+0

P.S. - Я ответил на мой вопрос здесь. – Sid

ответ

2

Я нашел способ сделать это. В моем случае я использую xml в качестве источника данных для дерева. Я связываю событие open_node с jstree следующим образом. Имейте в виду, что, хотя я использую xml, внутренняя структура - это данные html.

// jsTree Configuration hash 
var jsTreeConfig = {}; 

$("#demo1").jstree(jsTreeConfig) 
      .bind('open_node.jstree', function(e, data) { 
       var parentObj = data.rslt.obj; // parent object 
       var jstreeInstance = data.inst; // jstree instance 
       $(data.rslt.obj).find("li").each(function(idx, listItem) { 
        var child = $(listItem); // child object 
        // do Stuff with child which can be any level of hierarchy depth 
        // ... 
       }); 
      }); 
+0

Извините за бедный отступ. jstree ({...}) имеет все возможности для создания экземпляра jstree. Для этого вам нужно предварительно загрузить jQuery. – Sid

4

Вы можете получить полное дерево все с помощью этого переключателя: $("#demo1").find("li > a")

+0

Спасибо @fliespl, но мне нужны только дочерние узлы данного родителя. Я понял способ сделать это. Я собираюсь опубликовать ответ вскоре после тестирования. – Sid

4

Я пробовал предыдущее решение и не работает с последней версией jsTree (v3.2.1). Ниже приведено обновленное решение для получения дочерних узлов и дочерних узлов родителя.

$("#myTree").bind('selected_node.jstree', function (node, data) { 
    var selectedNodes = $("#myTree").jstree(true).get_json(data.node.id, { flat: true }); 
    for (var i = 0; i < selectedNodes.length; i++) { 
     // Apply logic here 
     // ... 
     // ... 
     // ... 
    } 
}); 
Смежные вопросы