перебрать jstree для поиска всех вхождений идентификатора узла, а затем изменить класс этих узлов - PullRequest
2 голосов
/ 04 ноября 2011

У меня есть следующий код javascript, который меняет класс (тега <ins>) для каждого выбранного узла в jstree:

   $j("#actionButton1").click(function() {

      $j.each($j("#demo2").jstree("get_selected"), function(index, element) {

      alert($j(element).attr('id'));

      var sub_id = $j(element).attr('id'); //node id is stored in the varialble sub_id

      $j("#"+sub_id+" ins:eq(1)").attr("class","jstree-icon2"); // set class to display new icon

   });//end of selected nodes loop
});

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

Я считаю, что у меня есть цикл по jstree для поиска всех вхождений sub_id, а затем связыванияновый класс для узлов.

Любой намек на то, как это сделать, приветствуется.

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Когда вы используете селектор # id, он вернет только первый элемент. Добавление sub_id к имени или атрибуту класса должно помочь вам в вашей проблеме. Как я уже упоминал в комментарии, атрибут id должен быть уникальным на странице.

Вы также захотите удалить :eq(1) из своего селектора, если хотите применить класс ко всем соответствующим элементам, а не только ко второму. :eq принимает индекс на основе 0.

Редактировать

Ваш новый селектор:

$j("your-element[name='"+sub_id+"' ins").attr("class","jstree-icon2");
1 голос
/ 04 ноября 2011

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

$j('#actionButton1').click(function() {
    $j.each($j('#demo2').jstree('get_selected'), function(index, element) {
        $j('ins:eq(1)', element).addClass('jstree-icon2');
    });
});

Как упоминалось в комментариях выше, идентификаторы должны быть уникальными.

Надеюсь, это поможет!

...