我正在尝试选择嵌套在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'));
答案 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;
});