【问题标题】:Delete all nodes in jsTree删除jsTree中的所有节点
【发布时间】:2011-06-09 19:02:00
【问题描述】:

有没有办法从 jsTree 中清除所有节点,这比遍历所有节点一个一个地删除它们要快?

【问题讨论】:

    标签: javascript jquery jstree


    【解决方案1】:

    我发现的最简单的方法是在包含树的 div 上简单地调用 .empty

    $('#tree').empty();
    

    您可以选择使用更具体的选择器作为empty() 的参数,但这对我来说很好。

    【讨论】:

    • 如果你也跟着 $('#tree').empty().jstree('destroy'); 这是一件好事
    • @DanielJordan 是的,更好,因为不破坏你就不能建立一个新的 jstree...谢谢
    【解决方案2】:
    $('#tree').jstree("destroy").empty();
    

    这对我有用。先销毁jstree元素和关联事件,然后清空包含jstree的div。

    【讨论】:

    • 在用新数据更新 jstree 时为我工作。谢谢。
    【解决方案3】:

    在此处查看文档:http://www.jstree.com/documentation/core

    .delete_node(节点)

    删除一个节点。触发事件。

    mixed node
    

    这可以是 DOM 节点、jQuery 节点或指向 要删除的元素。

    看来你可以只做一个选择器来删除你想要的所有节点,不需要循环。

    【讨论】:

    • 这似乎有效。我一直在使用 remove(),但它不起作用。
    • myJsTree.delete_node(treeDiv.find('> ul > li');
    • 我的熟悉度很低,但似乎您可以将其清理为简单的选择器本身而不是节点本身。类似于myJsTree.delete_node('[treediv] > ul > li');
    【解决方案4】:
    myTree.delete_node(myTree.get_node("#").children);
    

    【讨论】:

      【解决方案5】:

      在根节点上调用.remove(node)

      【讨论】:

      • 抛出一堆异常。
      【解决方案6】:

      下面的调用将销毁当前的 jsTree 实例,移除所有绑定的事件监听器,显然实现了移除所有节点的最终目标。不过这个方法有点矫枉过正,不得不说。

      $("#DivElementContainingYourTree").jstree("init");
      

      【讨论】:

      • 对于jstree的最后一个版本:$(element).jstree("destroy");
      【解决方案7】:
      $('#jstree').parent().html('<div id="#jstree"></div>');
      

      【讨论】: