如何在jquery Jstree中打开所有节点?

时间:2012-06-13 15:26:36

标签: javascript jquery jstree

我正在使用以下代码:

$("#treeview").jstree();
$("#treeview").jstree('open_all');

使用以下html:

<div id="treeview">
  <ul>
    <li>
      <a href="#">rubentebogt</a>
      <ul>
        <li>
          <a href="#" onclick="goTo('index.php?module=alarm&amp;pagina=dashboard&amp;id=6',false);">Beneden</a>
        </li>
        <li>
          <a href="#" onclick="goTo('index.php?module=alarm&amp;pagina=dashboard&amp;id=7',false);">Boven</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

我的问题是所有节点都保持关闭状态,我无法用jstree打开它们('open_all');

9 个答案:

答案 0 :(得分:56)

jsTree documentation是“次优”。文档没有明确说明初始化是异步工作的。有core.loaded()

  

虚拟函数,其目的仅是触发加载的事件。加载树的根节点后,但在initial_open中设置的任何节点打开之前,会触发此事件。

这表明在设置树之后会触发事件loaded.jstree。您可以挂钩该事件以打开所有节点:

var $treeview = $("#treeview");
$treeview
  .jstree(options)
  .on('loaded.jstree', function() {
    $treeview.jstree('open_all');
  });

答案 1 :(得分:26)

我正在使用jstree和Chrome的第3版。加载的事件对我来说不起作用,但即使在创建了jstree实例之后,ready事件仍然有效:

$('#treeview').on('ready.jstree', function() {
    $("#treeview").jstree("open_all");          
});

http://www.jstree.com/api/#/?q=.jstree%20Event&f=ready.jstree

答案 2 :(得分:18)

如果要在加载树时打开所有节点:

$("#treeview")
    // call `.jstree` with the options object
    .jstree({
        "plugins" : ["themes", "html_data","ui","crrm","sort"]
    }) 
    .bind("loaded.jstree", function (event, data) {
        // you get two params - event & data - check the core docs for a detailed description
        $(this).jstree("open_all");
    })      
});

答案 3 :(得分:9)

上面的所有答案都不适用于我的工作区。 我再次搜索并发现此链接(Why doesn't jsTree open_all() work for me?)很有帮助,并发布我的回答:

jstree版本:3.0.0-bata10

$(document).ready(function() {
  $("#tree").bind("loaded.jstree", function(event, data) { 
    data.instance.open_all();
  });
  $("#tree").jstree();
})

答案 4 :(得分:1)

使用简单的代码

$(".jstree").jstree().on('loaded.jstree', function () {
     $(".jstree").jstree('open_all');
})

答案 5 :(得分:1)

使用html数据时,你可以在任何&lt; li&gt;上设置jstree-open类。元素使它最初扩展,以便它的孩子是可见的。 - https://www.jstree.com/docs/html/

<li class="jstree-open" id="node_1">My Open Node</li>

答案 6 :(得分:0)

我在这里尝试了所有答案,但他们没有使用jsTree(v3.3.4)。有效的是load_node.jstree事件:

    .on( 'load_node.jstree', function () {
      jstree.jstree( "open_all" );
    } )

答案 7 :(得分:0)

您也可以像这样将动画应用于开合:

$(document)
    .on("click", "#open-all-folders", function () {
        // param1 set to null to open/close all nodes
        // param2 is the duration in milliseconds
        $("#tree-ref").jstree().open_all(null, 200);
    })
    .on("click", "#close-all-folders", function () {
        $("#tree-ref").jstree().close_all(null, 200);
    });

(或类似地适用于.on('ready.jstree', function() { // code here });

答案 8 :(得分:-1)

.bind("loaded.jstree", function (event, data) {
        // you get two params - event & data - check the core docs for a detailed description
        $(this).jstree("open_all");
    })