2012-04-24 4 views
4

Я хочу получить все листовые узлы (ID & текст узла) от jsTree?jsTree: Как получить все листовые узлы из jstree?

Я не использую флажок ui: jsTree.

Root 
     -----A 
      -----A1 
        -----A1.1 

      -----A2 
        -----A2.1 

     -----B 

      -----B2 

     -----C 
      -----C1 
        -----C1.1 

Я хочу список листовых узлов из jsTree.

Ожидаемый результат: [A1.1, A2.1, B2, C1.1]

Любая помощь или руководство по этому вопросу будут оценены.

ответ

5

Что-то вроде этого?

$('.jstree-leaf').each(function(){ 
    var id = $(this).attr('id'); 
    var text = $(this).children('a').text(); 
}); 
+0

где добавить эту итерацию? любой обходной путь? образец кода ? – StackOverFlow

+0

Я согласен с решением. Это можно вызывать из любой функции. Я бы изменил две вещи. 1) Какая потребность в substr (5) на идентификаторе. 2) Текст должен быть обрезан. $ ('. jstree-leaf'). each (function() { var id = $ (this) .attr ('id'); var text = $ (this) .children ('a'). text () .trim(); }); – MMeah

+0

@MMeah Спасибо за ответ. Я также согласен с решением. эта итерация вернет весь листовой узел, присутствующий в jsTree. Я столкнулся с одной проблемой. Моя страница содержит 2 jsTree. tree1 и tree2. Я хочу только весь листовой узел дерева2. Как я могу это достичь? – StackOverFlow

-1
//////////////////////////////////////////////////////////////////// 
// @name  : 
// @description : function 
// @params  : 
// @return  : 
//////////////////////////////////////////////////////////////////// 
function jstreeIterateNodes(
    treeOwner , 
    node , 
    fnCallbackCondition , 
    bRecursive , 
    arrCollector 
){ 

    var 
     childNodes = node.children , 
     arrCollector = (arrCollector) ? arrCollector : [] , 
     bUseCallback = (typeof fnCallbackCondition === "function") ? true : false , 
     nodeItreator = null; 

    for(
     var i = 0; 
     i < childNodes.length; 
     ++i 
    ){ 

     nodeItreator = treeOwner.get_node(childNodes[i]); 

     if(bUseCallback){ 

      if(fnCallbackCondition(nodeItreator , node)){ 

       arrCollector.push({ 
        node : nodeItreator, 
        parent : node 
       }); 

      } 

     } 
     if(bRecursive){ 
      jstreeIterateNodes(
       treeOwner , 
       nodeItreator , 
       fnCallbackCondition , 
       arrCollector 
      ); 
     } 
    } 

    return arrCollector; 
} 
var 
    _your_jstree_ = $("#YOUR_TREE_ELEMENT").jstree(true) , 
    bRecursiveItreation = false , // could be true for recursive 
    arrCollected = null; 

arrCollected = jstreeIterateNodes( 
    _your_jstree_ , 
    _your_jstree_.get_node("some_node_id") , 
    function _your_filter_callback_(itrated_node , parent_itrated_node){ 
     // Do what ever and return true to collect 
    } , 
    bRecursiveItreation 
); 

// DO SOMTHING WITH arrCollected which contains all collected nodes 
+0

Не могли бы вы добавить абзац, поясняющий ваш код, пожалуйста? –

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