event.target указывает на дочерний элемент - PullRequest
3 голосов
/ 27 февраля 2010

Когда пользователь щелкает элемент <li> или его дочерний элемент, я хочу добавить класс к этому элементу <li>.

Это отлично работает, но для повышения производительности я решил связать это событие с <ul> -элементом, поэтому открепление и связывание этого события происходит намного быстрее в списке, состоящем из 1000 <li> -элементов. Единственное изменение, которое, я думал, мне пришлось сделать, это заменить this на 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');
    }
});

Интересно, будет ли мой второй способ добиться этого быстрее, если нет простого решения проверить, является ли этот целевой элемент частью элемента списка ...

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Ну, вы можете сделать все это с помощью инструмента jQuery на :

$('#list li').on('mousedown', function() {
  $(this).addClass('green');
});

Вы можете прочитать о том, что на делает здесь: http://api.jquery.com/on/

2 голосов
/ 27 февраля 2010

Необходимо проверить, есть ли тег LI в родительских элементах целевого элемента.

У всех распространенных фреймворков есть способ определить это, это up() в прототипе, ancestor() в YUI3, и, глядя на документы JQuery, кажется, что он имеет parent() и parents() функция, которую вы можете использовать для этого.

См .: http://docs.jquery.com/Traversing

Я не использовал JQuery, но я предполагаю, что проверка на $(event.target).parent('li') является ответом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...