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

jsTree : How to get all leaf nodes from jstree?

本文关键字:获取 叶节点 jstree jsTree      更新时间:2023-09-26

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

如能就此事项提供任何帮助或指导,将不胜感激。

像这样的东西?

$('.jstree-leaf').each(function(){
  var id   = $(this).attr('id');
  var text = $(this).children('a').text();
});
////////////////////////////////////////////////////////////////////
// @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