2015-12-07 6 views
1
$(document).on('click', '#ul li:not(.info)', function(){ 

    alert(); 
}); 

Мой HTML, как этоJquery not selector не работает над дочерним элементом?

<ul id="ul"> 
<li></li> 
<li><a href="#" class="info"></li> 
</ul> 

, почему он до сих пор срабатывает, когда я нажимаю на .info?

+1

Ваш класс 'info' не определен на любом LI. Что такое ожидаемое поведение здесь? Не исключать ли какое-либо событие click на якоре с классом 'info' или на любом' li', который имеет элемент с class 'info'? –

ответ

0

вы можете сделать его это и попробовать

$(document).on('click', '#ul li a:not(.info)', function(){ 

    alert(); 
}); 
+0

Вы привязываете событие click на якоре, а не 'li'. Можно было ожидать поведения, не уверен ... –

1

Потому что ваш HTML определяет .info класса на <a> потомка вместо самого <li>, в то время как ваш селектор обозначает :not(.info) что означает <li> не имеющий .info класса.

Попробуйте вместо этого:

$(document).on('click', '#ul li:not(:has(.info))', function(){ 
    alert(); 
}); 

В качестве альтернативы, вы можете просто переместить .info класс к <li> себе:

<li class="info"><a href="#"></li> 

См JQuery-х has и Fiddle

+0

u не нужно использовать .has() –

+0

@JenniferAniston, видимо, вы это делаете. Если вы не идете с предложенной альтернативой ... – haim770

0

#ul li:not(.info) ищет класса в ли, который не является информацией

#ul li a:not(.info) will give you the right result 

JSFiddle

+0

Вы привязываете событие click на якоре, а не 'li'. Можно было ожидать поведения, не уверен ... –

Смежные вопросы