Select jsTree节点不触发select_node事件

Select jsTree node without triggering select_node event

我有一个 jsTree,当用户点击一个节点时,它会触发 select_node 事件。但是,我还有一个列表,其中包含一些带有 jsTree 中节点 ID 的条目。在 selecting 此列表中的条目时,我只需要 select 树中的节点,但不触发 select_node 事件。根据文档,select_node api 有 3 个参数

https://www.jstree.com/api/#/?q=(&f=select_node(obj [, supress_event, prevent_open])

obj:混合一个数组可以用来[=44​​=]多个节点
supress_event: 布尔值,如果设置为 true,则不会触发 changed.jstree 事件
prevent_open: 布尔值如果设置为 true selected 节点的父节点将不会被打开

但是,它并没有谈到抑制select_node事件。有什么建议吗?

我在这里看到两个选项:

  1. 在您手动 select 来自代码的节点时暂时禁用您的 select_node 事件处理程序。
  2. 使用 changed 事件而不是 select_node 事件并使用抑制标志。

我不知道是否有更好的方法来完成它,但我是这样做的:

我没有使用 select_node 函数,而是编写了一个函数,该函数获取节点的 ID 然后打开它,将其设置为选中,然后递归打开父节点。

$('#TreeDiv').jstree(true).open_node(actualId);
$('#TreeDiv').jstree(true).get_node(actualId).state.selected = true;
var parent = $('#TreeDiv').jstree(true).get_parent(actualId);
while (parent.length > 0) {
    $('#TreeDiv').jstree(true).open_node(parent);
    parent = $('#TreeDiv').jstree(true).get_parent(parent);
}

您可以使用以下内容;对我有用

$('#TreeDiv').jstree("select_node", actualId, true);

根据 jsTree 官方文档,select_node 方法接受一个 Boolean 值作为第二个参数,指示是否应抑制相应的事件。参见 this page