Как получить индекс выбранных узлов в jstree
Я хочу использовать jstree, чтобы позволить пользователю выбирать узлы и переупорядочивать дерево с помощью плагина drag'n'drop. Вот 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(','));
});
На данный момент все выбранные идентификаторы отображаются в том порядке, в котором они были выбраны. Можно ли получить их в том порядке, в котором они появляются в дереве? Даже после того, как пользователь перетащил элементы?
1 ответ
Я думаю, это зависит от того, что вы подразумеваете под появлением в дереве. Если вы имеете в виду визуально появиться - вы можете использовать универсальный селектор и собирать идентификаторы:
$("#ProductInterests").find('.jstree-checked').closest('.jstree-node')
.toArray().map(function (v) { return v.id; })
Однако это не вернет узлы, которые не видны (что будет много, так как вы используете three_state).
Если это не для вас нормально, вы можете пройти модель внутреннего дерева с помощью рекурсивной функции и собрать узлы в их истинном порядке, независимо от того, видны они или нет. Для этого вам необходимо проверить: $("#ProductInterests").jstree(true)._model.data['#'].children
Вот обновленная скрипка, использующая метод выше (не стесняйтесь оптимизировать функцию, это не очень элегантно):
http://jsfiddle.net/dt2rk2d1/1/