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

Posted

技术标签:

【中文标题】jsTree:如何从 jstree 获取所有叶节点?【英文标题】:jsTree : How to get all leaf nodes from 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]

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

【问题讨论】:

【参考方案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 你能帮我解决这个问题吗***.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 

【讨论】:

你能添加一段解释你的代码吗?

以上是关于jsTree:如何从 jstree 获取所有叶节点?的主要内容,如果未能解决你的问题,请参考以下文章

jstree 如何获得选中节点的值?

jstree 如何获得选中节点的值?

jsTree:如何将选定节点的 ID 获取到 jsTree 中的根节点?

如何获得所有选中的节点jstree

jstree获取root的所有子节点

jstree中想要选中子节点,父节点就会变成选中状态,需要如何修改。