Селектор «Выбрать все, кроме» в JQuery - PullRequest
3 голосов
/ 31 августа 2011

У меня есть DIV, который содержит много дочерних элементов, таких как, например, другие DIV, SPAN и ссылки.

Можно ли указать в селекторе JQuery, что я хочу вызывать функцию при каждом щелчке по элементу этого DIV (включая сам DIV), за исключением всех ссылок (a), где этофункция не должна вызываться?

Ответы [ 4 ]

3 голосов
/ 31 августа 2011

Вместо того, чтобы выбирать все и исключать некоторые элементы и привязывать обработчики событий к каждому из них, более простым способом (imo) было бы присоединить обработчик событий только к div и проверить, была ли нажата ссылка или нет ( делегирование события ):

$('#yourDiv').click(function(event) {
    if(event.target.nodeName !== 'A') {
        // do your stuff
    }
});

Это будет работать только в том случае, если ссылки не имеют никаких других элементов в качестве дочерних.

Более надежным может быть использование .delegate [документы] и :not [документы] псевдоселектор:

$ ('# yourDiv'). Делегат (': not (a)', 'click', function (event) {// do your stuff});

Обновление: По-видимому, вам нужно добавить еще один обработчик событий click к div, чтобы иметь возможность обнаруживать щелчки на самом div (мои тесты с использованием делегата)только селектор не удался):

$('#yourDiv')
 .delegate(':not(a)', 'click', handler)
 .click(function(event) {
     if(event.target === this) {  // only if the `div` was clicked
         handler.apply(this, arguments);
     }
 });

Здесь handler - фактический обработчик события, который вы хотите выполнить.Используя дополнительную функцию, вам не нужно повторять код.

2 голосов
/ 31 августа 2011

Вы можете использовать метод jQuery not() для достижения того, что вы ищете.

например,

$('div, div *').not('a').click(function(){
    //handle click  
}); 

, альтернативно, вы можете использовать селектор :not()

например

$('div, div *:not(a)').click(function(){
    //handle click  
}); 

Но лично я считаю первый метод более читабельным и красивее.

2 голосов
/ 31 августа 2011
$('div#div_id, div#div_id *:not(a)').click(function(){
    // do whatever you like here
});

Демо

1 голос
/ 31 августа 2011

Вы можете использовать метод .not() для исключения элементов.

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