Как получить индекс выбранных узлов в 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(','));
});

http://jsfiddle.net/dt2rk2d1/

На данный момент все выбранные идентификаторы отображаются в том порядке, в котором они были выбраны. Можно ли получить их в том порядке, в котором они появляются в дереве? Даже после того, как пользователь перетащил элементы?

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/

Другие вопросы по тегам