【问题标题】:jsTree : How to get all leaf nodes from jstree?jsTree:如何从 jstree 获取所有叶节点?
【发布时间】:2012-05-04 20:25:40
【问题描述】:

我想从 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]

在此问题上的任何帮助或指导将不胜感激。

【问题讨论】:

    标签: javascript jquery jquery-plugins jquery-selectors jstree


    【解决方案1】:

    这样的?

    $('.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().修剪();});
    • @MMeah 感谢您的回复。我也同意解决方案。此迭代将返回 jsTree 中存在的所有叶节点。我面临1个问题。我的页面包含 2 个 jsTree。树 1 和树 2。我只想要tree2的所有叶子节点。我怎样才能做到这一点?
    • @Iddo 我的页面包含 2 个 jsTree。树 1 和树 2。我只想要tree2的所有叶子节点。我怎样才能做到这一点?
    • @VaibhaV 与单个树交谈,它们必须是可区分的。给他们 id="tree1" 和 id="tree2",然后为他们创建一个选择器。 $('#tree2 .jstree-leaf').each...
    • @MMeah 你能帮我解决这个问题吗stackoverflow.com/questions/10223212/dual-jstree-implementation
    【解决方案2】:
    ////////////////////////////////////////////////////////////////////
    // @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 
    

    【讨论】:

    • 你能添加一段解释你的代码吗?
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2012-04-11
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多