当 child 节点不存在直到 parent 展开时,如何在 JsTree 中打开 child 节点?

How to open child node in JsTree when child nodes do not exist until parent is expanded?

我有一个 parent 有多个 children 节点。问题是如果我想打开我调用的特定节点 $("#jstree").jstree("open_node", $('#node_27'));。问题是 parent 节点未打开,因此 $('#node_27') returns 是一个空数组。

如果我有 child ID,在打开 parent 之前没有将它们添加到 DOM 时如何打开它?

显然,如果你想 "deep open" 一个节点,你需要使用

$("#jstree1").jstree("open_node", ['rootId','childId','childChildId','yourNodeId']);

但是,有一个名为 _open_to 的方法已经自动执行此操作,因此您可以执行以下操作:

$("#jstree1").jstree("_open_to", 'yourNodeId'); //j1_5 in your case

它会打开它需要的任何东西以到达你想要的节点

_open_to 方法是私有方法,不应直接使用。虽然现在正在工作,但将来可能会改变,例如当 jsTree 作者决定改变他的库的内部机制时。

要打开父节点到节点,您可以简单地使用

$('#jstree1').jstree('select_node', 'node_27' );

作为奖励,您将选择目标节点。

如果您使用ajax 来填充树,则存在子节点延迟加载。您必须先使用 'load_node' 加载父节点,然后使用 'select_node' 加载子节点。

$('#jstree').on('refresh.jstree', function () {
    $('#jstree').jstree(true).load_node('parent-id', function () {
        $('#jstree').jstree().deselect_all();
        $('#jstree').jstree('select_node', 'child-id');
    });
});
$('#jstree').jstree(true).refresh(false, false);