选择不是指定元素后代的所有元素

时间:2011-02-05 23:45:03

标签: javascript jquery jquery-selectors

使用jQuery选择器,是否可以从另一个选择器中选择不是元素后代的所有元素。

例如,我想选择 a标记后代的所有th标记。我现在能看到的唯一方法如下:

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

2 个答案:

答案 0 :(得分:6)

假设您正在寻找后代(因为a元素作为th元素的兄弟是无效的HTML),您可以使用:not伪选择器来执行此操作:

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

在使用document.querySelectorAll的现代浏览器中,这应该相当快,但可能比旧版IE的原始浏览器慢。

在此处查看简单演示:http://jsfiddle.net/JR5sP/

答案 1 :(得分: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/