#jquery #selector #delegation
#jquery #селектор #делегирование
Вопрос:
У меня есть два UL, таких как показано ниже
<ul id="ul_one">
<li>list item</li>
<li>list item</li>
<li class="active">list item</li>
</ul>
<ul id="ul_two">
<li>list item</li>
<li>list item</li>
<li class="active">list item</li>
</ul>
Что я хотел бы сделать, это сначала удалить класс ‘active’ из <li>
‘s в ОБОИХ <ul>
‘s, а затем применить класс ‘active’ только к выбранному элементу. Например
$('#ul_one, #ul_two').on('click', 'li', function(e)
{
var clicked = e.target;
$('#ul_one, #ul_two').find('li.active').removeClass('active');
$(clicked).addClass('active');
});
Учитывая тот факт, что я использую делегирование, есть ли способ удалить класс из обоих <ul>
, не ссылаясь на них снова по имени. Поэтому вместо того, чтобы сказать:
$('#ul_one, #ul_two').find('li.active').removeClass('active');
могу ли я сказать что-то вроде:
$('ALL items in the original selector').find('li').removeClass('active');
Комментарии:
1.
li.active
В вашем случае простого таргетинга будет недостаточно? Например: jsfiddle.net/avs19ajk2. Нет, это был упрощенный пример. На самом деле, будет несколько других ul с активными li, которые я не хочу, чтобы эта функция касалась
Ответ №1:
Лучше всего кэшировать ULS.
var uls = $('#ul_one, #ul_two');
uls.on('click', 'li', function() {
uls.find('li.active').removeClass('active');
$(this).addClass('active');
});
Комментарии:
1. Работает как шарм. Очень просто. Спасибо