选择父母没有某个班级的所有元素(使用'.not()')

时间:2012-08-21 14:48:27

标签: javascript jquery html dom dom-traversal

我正在尝试选择嵌套在DOM树中某处的类.select的所有元素。
唯一的限制是,他们不允许任何父母加入班级.forbidden

所以它在后面的树部分找不到任何元素:

<div>
    <div class="forbidden">
        <div>
            <div>
                <div class="select">Some Content</div>
            </div>
        </div>
    </div>
</div>

但是会在这里找到1个元素:

<div>
    <div>
        <div>
            <div>
                <div>
                    <div class="select">Some Content</div>
                </div>
            </div>
        </div>
    </div>
</div>

如何使用.not()功能实现此选择? 这样的事情:$('.select').not($(this).parents().hasClass('.forbidden'));

3 个答案:

答案 0 :(得分:6)

您需要检查父元素,closest()停在该类找到的第一个元素,并且选择器是否有长度,即。包含元素,在DOM树的某个地方有一个元素。

$('.select').filter(function(){
     return !$(this).closest('.forbidden').length;
});

答案 1 :(得分:4)

我不会使用:not

但我会使用filter

$('.select').filter(function(){return !$(this).parents().is('.forbidden')});

请注意,如果集合中的至少一个元素(此处为父元素)与选择器匹配,则is将返回true。

答案 2 :(得分:3)

$('.select').filter(function() {
    return $(this).closest('.forbidden').length == 0;
});