Как получить идентификатор выбранного узла в jsTree?

Как получить идентификатор выбранного узла в jsTree?

function createNewNode() {
  alert('test');
  var tree = $.tree.reference("#basic_html");
  selectedNodeId = xxxxxxxxx; //insert instruction to get id here
  tree.create({ data : "New Node Name" }, selectedNodeId);
}

person murze    schedule 06.04.2010    source источник


Ответы (12)


Узлы в jsTree по сути являются обернутыми элементами списка. Это даст вам ссылку на первую.

var n = $.tree.focused().get_node('li:eq(0)')

Вы можете заменить $.tree.focused(), если у вас есть ссылка на дерево.

Чтобы получить идентификатор, возьмите первый соответствующий элемент

if (n.length)
    id = n[0].id

или вы можете использовать функцию attr jQuery, которая работает с первым элементом в наборе

id = n.attr('id');
person harpo    schedule 06.04.2010

Не имея возможности заставить работать решение harpo и не желая использовать решение Оливье, поскольку оно использует внутренние функции jsTree, я придумал другой подход.

$('#tree').jstree('get_selected').attr('id')

Это так просто. Функция get_selected возвращает массив выбранных элементов списка. Если вы сделаете .attr для этого массива, jQuery будет смотреть на первый элемент в списке. Если вам нужны идентификаторы нескольких вариантов, вместо этого обработайте их как массив.

person Brad    schedule 13.07.2011
comment
понятия не имею, почему data.rslt.obj.attr(id) здесь не работает (если у вас есть данные в качестве аргумента в обработчике onselect), но это помогает и завершает поиск решения в течение часа — спасибо! - person Nicolas78; 01.09.2011
comment
Определенно правильное решение. - person davidethell; 14.10.2011
comment
В зависимости от того, какой идентификатор вам нужен (DOM или фактические данные узла), попробуйте вместо этого: $('#tree').jstree('get_selected').data('id') - person nickb; 06.11.2011
comment
у меня это не сработало, так как .attr не определено. Это может быть из-за того, что jQuery не загружен? $('#tree').jstree('get_selected') действительно возвращает массив идентификаторов выбранных узлов - person Don Cheadle; 29.09.2015
comment
Не выполнил задание, как упомянул mmcrae, оно не определено. Что мне помогло, так это $('#tree').jstree('get_selected').toString(); - person GTodorov; 06.09.2016
comment
@GTodorov Какое значение возвращает get_selected? Сомнительно, что вам нужна строка здесь. - person Brad; 06.09.2016
comment
@PeterRankin Если вы собираетесь полностью изменить ответ, просто опубликуйте свой ответ. - person Brad; 06.12.2016
comment
В самой последней версии jsTree код $('#tree').jstree('get_selected') фактически возвращает массив идентификаторов, а не узлов. Чтобы получить массив узлов, используйте $('#tree').jstree('get_selected', true). Ответ выше не будет работать в самой последней версии jsTree. Дополнительные сведения см. в текущей документации. - person Peter Rankin; 06.12.2016
comment
@PeterRankin Вы должны опубликовать это как свой собственный ответ и указать, для чего работает новый API. Этот (очень) старый ответ будет работать для людей со старыми версиями. - person Brad; 06.12.2016
comment
@Brad - Спасибо за вашу помощь. Новый ответ для более свежего API опубликован здесь. - person Peter Rankin; 06.12.2016
comment
почему вы намеренно позволяете ответу устареть? редактирование даже не удалило исходный ответ, поэтому это не было бы проблемой для людей, все еще использующих старую версию библиотеки. - person rdans; 15.02.2021
comment
@rdans Лучше опубликовать другой ответ как другой ответ, чтобы никого не смущать из-за разницы версий и чтобы ответ Питера мог (потенциально) быть принят на вопрос. Питер написал хороший ответ ... он может стоять один. - person Brad; 15.02.2021

В jstree версии 3.1.1 вы можете получить его напрямую от get_selected:

$("#<your tree container's id>").jstree("get_selected")
person tipycalFlow    schedule 09.07.2015
comment
Ваш ответ на 100% правильный. Для других метод get_selected не получает узел, а вместо этого получает идентификатор узла. Вы можете получить узел, используя идентификатор, вызвав метод «get_node» — например. var node = $(#myelement).jstree(get_node, nodeId); - person barrypicker; 21.02.2018

В самой последней версии jsTree (проверено на 3.3.3) вы можете сделать это, чтобы получить массив идентификаторов:

var ids = $('#tree').jstree('get_selected');

Это вернет, например, ["selected_id1", "selected_id2", "selected_id3"]. Если вы хотите получить выбранные узлы (не идентификаторы), вы можете сделать это:

var nodes = $('#tree').jstree('get_selected', true);

текущие документы содержат дополнительную информацию.

person Peter Rankin    schedule 06.12.2016
comment
Я не знал о параметре «true», чтобы получить фактические узлы. Круто - спасибо! - person barrypicker; 21.02.2018

У меня были проблемы с получением выбранных идентификаторов из дерева с НЕСКОЛЬКИМ выбором. Вот такие они у меня получились:

var checked_ids = [];
$("#your-tree-id").jstree('get_selected').each(function(){    
      checked_ids.push($(this).data('id'));                         
});
person agarcia    schedule 22.04.2013

В моем случае вызов данных не работает. Мне удалось получить доступ к данным моего узла с помощью функции attr.

$("#tree").jstree("get_selected").attr("my-data-name");
person Damien C    schedule 31.07.2013

чтобы получить все выбранные идентификаторы, используйте приведенный ниже код

var selectedData = [];
var selectedIndexes;
 selectedIndexes = $("#jstree").jstree("get_selected", true);
jQuery.each(selectedIndexes, function (index, value) {
     selectedData.push(selectedIndexes[index].id);
 });

теперь у вас есть все выбранные идентификаторы в переменной "selectedData"

person Ali    schedule 16.06.2017

С последней версией Jstree; вы можете сделать это следующим образом:

<script type="text/javascript>
    var checked_ids = [];
    $('#your-tree-id).jstree("get_checked",null,true).each(function(){
        checked_ids.push(this.id);
    });
    alert(checked_ids.join(","));
</script>
person Jamshid Hashimi    schedule 28.06.2012

Просто используйте

var nodeId = $('#FaqTreeView').jstree().get_selected("id")[0].id;

где #FaqTreeView — это идентификатор вашего div, содержащего jstree.

person Willian De Castro    schedule 07.06.2016

В некоторых случаях и/или версиях jstree это решение не работает.

$('#tree').jstree('get_selected').attr('id');

Вместо определенного «id» я ничего не получаю. Что мне помогло:

$("#tree").jstree("get_selected").toString();
person GTodorov    schedule 06.09.2016

Это все старые ответы для старых версий. Начиная с версии 3.3.3 это будет работать для получения всех атрибутов выбранного узла.

$('#jstree').jstree().get_selected(true)[0]

Если вам нужен идентификатор, добавьте .id в конце. Вы можете просмотреть все остальные атрибуты в инструментах веб-разработчика, если скопируете приведенный выше код.

person Tom McDonough    schedule 17.01.2017

Вы можете использовать следующий код var nodes = $("#jstree_demo_div").jstree(true).get_selected("full", true);//Список выбранных узлов

nodes[0].id//Который даст идентификатор 1-го объекта из массива

person Arti Gaikwad    schedule 08.05.2017