2015-08-09 4 views
0

У меня есть дерево (js), которое имеет глубину 3 уровня и более. Хотя я предварительно загрузил все данные дерева, дерево свернуто, за исключением корневого узла. В конкретном событии js я хочу развернуть определенный узел (у меня есть его идентификатор/селектор). Как я могу это сделать?jstree - развернуть ветвь до определенного grand-child

На данный момент я могу только:

placeholder.find(".jstree").jstree("open_all"); 
placeholder.find(".jstree").jstree("select_node", "[data-xxx = '" + yyy + "']"); 

, который расширяет все, и выбирает данный узел. Я хочу достичь того же, но расширяю только ветви (ветки), которые приводят к моему узлу.

Выражаясь в картинках, что мой код делает: enter image description here

, что я хочу сделать, это: enter image description here

Я использую последнюю версию jsTree.

+0

Почему вы используете open_all? – daremachine

+0

Если я не open_all, мой узел не отображается. Или даже если он выбран, он не отображается, потому что его родительский обруч. –

+0

попробуйте сделать это с помощью поискового плагина ... он делает именно то, что вы хотите. Https://www.jstree.com/demo/ – daremachine

ответ

1

Вы должны использовать функцию _open_to. При условии, у вас есть идентификатор узла должно быть довольно просто:

placeholder.find(".jstree").jstree(true)._open_to("NODE_ID_HERE"); 

Вот документы на этой функции: https://www.jstree.com/api/#/?q=_open_to&f=_open_to%28obj%29

EDIT: если вы хотите, чтобы выбрать узел, вызывая select_node будет достаточно, так как он по умолчанию откроет родителям узла.

+0

Я надеялся, что вы перезвоните. placeholder.find (". Jstree"). Jstree (true) ._ open_to ("node_" + yyy); placeholder.find (". Jstree"). Jstree ("select_node", "[data-xxx = '" + yyy + "']"); заработал для меня. По какой-то причине только select_node не открывает родителей. –

+0

ОК, я понимаю. select_node действительно открывает родителям, но только если вы передадите идентификатор. Если вы передадите селектор (API говорит «mixed»), он не открывает родителей. –

+1

Да, извините, я сделаю это более ясным - передача селектора не будет работать, поскольку селектор ничего не найдет, поскольку узел еще не находится в DOM. Используйте только строковые идентификаторы (без префикса '#'), где это возможно. – vakata

Смежные вопросы