jsTree:如何从jstree获取所有叶节点?

4
我想从jsTree中获取所有叶节点(节点的ID和文本)?
我没有使用复选框UI:jsTree。
   Root
      -----A
           -----A1
                  -----A1.1

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

      -----B

           -----B2

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

我希望得到jsTree中叶子节点的列表。
期望输出: [A1.1, A2.1, B2, C1.1]
如有任何帮助或指导将不胜感激。
2个回答

5

Something like this?

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

我同意这个解决方案。它可以从任何函数中调用。但我会做两个更改。1)ID上的substr(5)是必要的吗?2)文本应该被修剪。$('.jstree-leaf').each(function(){ var id = $(this).attr('id'); var text = $(this).children('a').text().trim(); }); - MMeah
@MMeah 谢谢回复。我也同意这个解决方案。这个迭代将返回jsTree中所有叶节点。我遇到了一个问题。我的页面包含两个jsTree。tree1和tree2。我只想要tree2的所有叶节点。我该如何实现? - StackOverFlow
@Iddo 我的页面包含2个jsTree,tree1和tree2。我只想获取tree2的所有叶子节点。我该如何实现? - StackOverFlow
1
@VaibhaV 要与单个树进行交互,必须使它们可区分。给它们分配id="tree1"和id="tree2",然后为它们创建选择器。$('#tree2 .jstree-leaf').each... - MMeah
@MMeah,你能帮我解决这个问题吗?http://stackoverflow.com/questions/10223212/dual-jstree-implementation - StackOverFlow
它只给了我树的根叶节点,而不是所有的叶子节点。 - Jalaleddin Hosseini

-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 

请您添加一个解释您代码的段落,谢谢。 - Janis F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接