2011-02-05 3 views
2

Используя селектор jQuery, можно выбрать все элементы, которые не являются потомком элементов из другого селектора.Выберите все элементы, которые не являются потомками указанного элемента.

Например, я хотел бы, чтобы выбрать все a тегов, которые не потомка th тега. Единственный способ, которым я могу видеть, чтобы сделать это прямо сейчас выглядит следующим образом:

$('a').filter(function() { 
    return $(this).closest('th').size() == 0 
}) 
+2

Вы имеете в виду родственника или потомка? Ваш код предлагает последние – lonesomeday

+0

Как @lonesomeday подразумевает: ** 'a' elements * не может быть * братьями из-под элемента' th' **. Не могли бы вы разместить html, с которым работаете? –

+0

Недействительно HTML, чтобы тег 'a' являлся братом тега' th' – Petah

ответ

6

Предполагая, что вы ищете потомок (так как имеющие a элемента в качестве собрата для th элементов не является допустимой HTML), вы можете использовать :not псевдо-селектор, чтобы сделать это:

$('a:not(th a)'); 

Это должно быть довольно быстро в современных браузерах, использующих document.querySelectorAll, но может быть медленнее, чем оригинал для более старых версий IE.

Смотрите простой демо здесь: http://jsfiddle.net/JR5sP/

+0

Почему я думал, что селектор ': not' не будет делать это, это за меня, но спасибо за ответ. Демо было отлично. – tjwallace

0

Предполагая, что вы хотите сделать, как ваш вопрос задает (независимо от недействительного HTML факта) и отфильтровать элементы с определенным собратом,

Вы можете сделать это:

$('a').filter(function() { 
    return $(this).siblings('b').length == 0; 
}).css('color', 'orange'); 

HTML:

<div> 
    <b>Hello there</b> 
    <a>Don't select me!</a> 
</div> 

<div> 
    <a>Select me!</a> 
    <a>Select me too!</a> 
</div> 

См. http://jsfiddle.net/JR5sP/1/

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