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

How to get the index of selected nodes in jstree

我想使用 jstree 让用户 select 节点并使用拖放插件重新排序树。 这是一个演示当前行为的 jsfiddle:

$("#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(','));
});

http://jsfiddle.net/dt2rk2d1/

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

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

$("#ProductInterests").find('.jstree-checked').closest('.jstree-node')
    .toArray().map(function (v) { return v.id; })

然而,这不会 return 不可见的节点(因为您使用的是 three_state,所以会很多)。

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

这里是更新后的fiddle使用上面的方法(随意优化功能,不是很优雅):
http://jsfiddle.net/dt2rk2d1/1/