如何在jsTree中获取所选节点的ID?

mur*_*rze 24 javascript jquery jstree

如何在jsTree中获取所选节点的id ?

function createNewNode() {
  alert('test');
  var tree = $.tree.reference("#basic_html");
  selectedNodeId = xxxxxxxxx; //insert instruction to get id here
  tree.create({ data : "New Node Name" }, selectedNodeId);
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*rad 98

由于无法使用harpo的解决方案,并且不愿意使用Olivier的解决方案,因为它使用内部的jsTree函数,我提出了一种不同的方法.

$('#tree').jstree('get_selected').attr('id')
Run Code Online (Sandbox Code Playgroud)

就这么简单.该get_selected函数返回一个选定列表项的数组.如果.attr对该数组执行操作,jQuery将查看列表中的第一项.如果您需要多个选择的ID,请将其视为数组.

  • 绝对是正确的解决方案. (4认同)
  • 我这不起作用,因为`.attr`未定义.这是因为jQuery没有加载吗?`$('#tree').jstree('get_selected')`确实返回了所选节点的id数组 (3认同)
  • 不知道为什么data.rslt.obj.attr("id")在这里不起作用(如果你在onselect处理程序中有数据作为参数),但是这样做并完成了> 1h搜索解决方案 - 谢谢! (2认同)
  • 在最新版本的jsTree中,代码`$('#tree').jstree('get_selected')`实际上返回一个ID数组,而不是节点.要获取节点数组,请使用`$('#tree').jstree('get_selected',true)`.上面的答案在最新版本的jsTree中不起作用.有关详细信息,请参阅[当前文档](https://www.jstree.com/api/#/?f=get_selected([full])). (2认同)

har*_*rpo 11

jsTree中的节点基本上是包装列表项.这将为您提供第一个参考.

var n = $.tree.focused().get_node('li:eq(0)')
Run Code Online (Sandbox Code Playgroud)

$.tree.focused()如果您有对树的引用,则可以替换.

要获取id,请使用第一个匹配的元素

if (n.length)
    id = n[0].id
Run Code Online (Sandbox Code Playgroud)

或者您可以使用jQuery attr函数,该函数适用于集合中的第一个元素

id = n.attr('id');
Run Code Online (Sandbox Code Playgroud)


tip*_*low 11

jstree版本中3.1.1,您可以直接从get_selected以下位置获取:

$("#<your tree container's id>").jstree("get_selected")
Run Code Online (Sandbox Code Playgroud)


Pet*_*kin 5

在最新版本的 jsTree(在 3.3.3 中检查)中,您可以这样做来获取 ID 数组:

var ids = $('#tree').jstree('get_selected');
Run Code Online (Sandbox Code Playgroud)

例如,这将返回["selected_id1", "selected_id2", "selected_id3"]. 如果要获取选定的节点(而不是 ID),可以执行以下操作:

var nodes = $('#tree').jstree('get_selected', true);
Run Code Online (Sandbox Code Playgroud)

当前文档包含更多信息。