Когда пользователь нажимает на элемент <li>
или на дочерний элемент, я хочу добавить класс к этому элементу <li>
.event.target указывает на дочерний элемент
Это прекрасно работает, но для повышения производительности я решил связать это событие с элементом <ul>
, поэтому отключение и привязка этого события происходит намного быстрее в списке, состоящем из 1000 <li>
-элементов. Единственное изменение, которое я думал, что мне пришлось сделать, это заменить на event.target
. НО event.target
может также ссылаться на дочерний элемент элемента списка или даже на внука.
Есть ли простой способ проверить этот целевой элемент является частью элемента списка или мне нужно пройти путь от event.target
до достижения элемента <li>
?
Это то, что я имел, прежде чем я решил связать событие с <ul>
тег, который работает, но не достаточно быстро:
$('#list li').mousedown(function(){
$(this).addClass('green');
});
И это то, что у меня сейчас, не работает должным образом, MouseDown на дочерний элемент не дает <li>
другой: имя класса
$('#list').mousedown(function(event){
if(event.target.nodeName == 'LI'){
$(event.target).addClass('green');
}
});
Интересно, если мой второй путь для достижения этой цели быстрее, если есть не простое решение, чтобы проверить, что целевой элемент является частью списка элемент ...
Это то же самое, что и '.mousedown()', за исключением того, что он принимает вновь созданные элементы, верно? Если это так, это не поможет мне, но мне нужно развязать 1000 событий вместо 1. – Harmen
Нет, это не то же самое, что «.mousedown()». Проверьте документацию - новый «live»() API выполняет именно то, что вам нужно. – Pointy
О, и обратите внимание, что встроенный в jQuery «live»() API не такой же, как старый плагин с похожим именем. один из них действительно привязывает обработчики событий непосредственно к элементам. Новый использует преимущества пузырьков, что и есть (я думаю), о котором вы просите. – Pointy