Select all elements that are not a descendant of a

2020-04-14 08:52发布

Using a jQuery selector, is it possible to select all elements that are not a descendant of the elements from another selector.

For example, I would like to select all the a tags that are not a descendant of a th tag. The only way I can see to do it right now is as follows:

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

2条回答
对你真心纯属浪费
2楼-- · 2020-04-14 09:01

Assuming that you do want to do as your question asks (regardless of the invalid HTML fact) and filter out elements with a specific sibling,

You can do this:

$('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>

See http://jsfiddle.net/JR5sP/1/

查看更多
Deceive 欺骗
3楼-- · 2020-04-14 09:21

Assuming you are looking for descendants (since having a a element as a sibling to th elements is not valid HTML) you can use the :not pseudo-selector to do this:

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

This should be pretty fast in modern browsers using document.querySelectorAll, but might be slower than the original for older versions of IE.

See a simple demo here: http://jsfiddle.net/JR5sP/

查看更多
登录 后发表回答