Javascript 如何获取jstree中所选节点的索引

Javascript 如何获取jstree中所选节点的索引,javascript,jstree,jstree-dnd,Javascript,Jstree,Jstree Dnd,我想使用jstree让用户选择节点,并使用拖放插件对树重新排序。 下面是一个演示当前行为的JSFIDLE: $("#ProductInterests").jstree({ core: { themes: { icons: false },"check_callback" : true }, checkbox : { tie_selection : false }, plugins: ["themes", "checkbox","dnd"] }); $('button')

我想使用jstree让用户选择节点,并使用拖放插件对树重新排序。 下面是一个演示当前行为的JSFIDLE:

$("#ProductInterests").jstree({
    core: { themes: { icons: false },"check_callback" : true },
    checkbox : { tie_selection : false },
    plugins: ["themes", "checkbox","dnd"]
});

$('button').click(function () {
    alert($("#ProductInterests").jstree(true).get_checked().join(','));
});


目前,所有选定的ID都会按其所选位置的顺序报告。是否可以按它们在树中出现的顺序获取它们?即使在用户拖放项目之后?

我想这取决于你所说的“出现在树中”是什么意思。如果您的意思是可视化显示-您可以使用通用选择器并收集ID:

$("#ProductInterests").find('.jstree-checked').closest('.jstree-node')
    .toArray().map(function (v) { return v.id; })
但是,这不会返回不可见的节点(这将是一个很大的问题,因为您使用的是three_状态)

如果这对您来说不合适,您可以使用递归函数遍历内部树模型,并按其真实顺序收集节点,无论是否可见。为此,您需要检查:
$(“#ProductInterests”).jstree(true)。\u model.data['#'].children

以下是使用上述方法更新的小提琴(请随意优化功能,它不是很优雅):

我想这取决于你所说的出现在树上是什么意思。如果您的意思是可视化显示-您可以使用通用选择器并收集ID:

$("#ProductInterests").find('.jstree-checked').closest('.jstree-node')
    .toArray().map(function (v) { return v.id; })
但是,这不会返回不可见的节点(这将是一个很大的问题,因为您使用的是three_状态)

如果这对您来说不合适,您可以使用递归函数遍历内部树模型,并按其真实顺序收集节点,无论是否可见。为此,您需要检查:
$(“#ProductInterests”).jstree(true)。\u model.data['#'].children

以下是使用上述方法更新的小提琴(请随意优化功能,它不是很优雅):