【问题标题】:How to get all the children nodes from the selected node in jstree如何从jstree中的选定节点获取所有子节点
【发布时间】:2016-03-28 14:49:04
【问题描述】:

var selectedNode = $("#evts").jstree("get_selected");

大家好.. 我正在使用上面的代码从树中获取选定的节点。 如何获取 selectedNode 的所有子节点...我使用的是 jstree 3.3...

提前致谢!

【问题讨论】:

标签: javascript jquery jstree


【解决方案1】:
var currentNode = $("#evts").jstree("get_selected");
   var childrens = $("#evts").jstree("get_children_dom",currentNode);

   for(var i=0;i<childrens.length;i++)
   {
   alert(childrens[i].innerText);
   }

上面的代码按预期工作......

【讨论】:

    【解决方案2】:
     var selectedNode = $("#evts").jstree("get_selected");
     var node_info=$('#evts').jstree("get_node",selectedNode[0]);
    
     // this node_info contains **children_d** an array of all child nodes' id .
     // **parents** an array of parent nodes
    
    
        alert(node_info.children_d.join(','));
        alert(node_info.parents.join(','));
    

    【讨论】:

      【解决方案3】:
         // Return childen even if not rendered
        function getAllChildrenNodes(parentNode, children=[]) {
          var node = $("#SimpleJSTree").jstree("get_node",parentNode);
          children.push(node.id);
          if (node.children) {
            for (var i = 0; i < node.children.length; i++) {
              getAllChildrenNodes(node.children[i], children);
            }
          }
          return children;
        }
       var selectingInProccess=0;
        // select all child nodes when parent selected
        $('#SimpleJSTree').on('select_node.jstree', function (e, data) {
          if(selectingInProccess==0){
            selectingInProccess=1;
            var closedNodes=[];
            var children = getAllChildrenNodes(data.node.id);
            children.forEach(function(node){
              var nodeClosed = ($("#SimpleJSTree").jstree("is_closed",node));
              $("#SimpleJSTree").jstree("select_node",node);
              if(nodeClosed){
                closedNodes.push(node);
              }
            });
            closedNodes.forEach(function(node){
              $("#SimpleJSTree").jstree("close_node",node,false);
            });
            selectingInProccess=0;
          }
        });
      
        // deselect all child nodes when parent deselected
        $('#SimpleJSTree').on('deselect_node.jstree', function (e, data) {
          if(selectingInProccess==0){
            selectingInProccess=1;
            var children = getAllChildrenNodes(data.node.id);
            children.forEach(function(node){
              $("#SimpleJSTree").jstree("deselect_node",node);
            });
            selectingInProccess=0;
          }
        });
      

      【讨论】:

        【解决方案4】:

        例如:

        enter $('button').on('click', function () {
        var instance = $('#tree').jstree(true);
            selected = instance.get_selected()[0];
        console.log(instance.get_node(selected).children);
        });
        

        如果您想在事件处理程序中执行此操作,那就更简单了:

        $('#tree').on('changed.jstree', function (e, data) {
        console.log(data.instance.get_node(data.selected[0]).children);
        });
        

        【讨论】:

          【解决方案5】:

          您可以使用get_children_dom (obj) 让孩子们尝试...

          var selectedNode = $("#evts").jstree("get_selected");
          var childrens = get_children_dom(selectedNode);
          

          文档:https://www.jstree.com/api/#/?f=get_children_dom(obj)

          【讨论】:

          • 没问题!如果我的回答帮助您接受并关闭问题!
          • ReferenceError: get_children_dom 未定义
          猜你喜欢
          • 2012-05-05
          • 1970-01-01
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-11
          • 2012-04-25
          • 1970-01-01
          相关资源
          最近更新 更多