选择父元素没有't具有某个类(使用'.not()')

Selecting all elements whose parents don't have a certain class (using '.not()')

本文关键字:not 使用 元素 选择      更新时间:2023-09-26

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

所以它不会在以下树部分中找到任何元素:

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

但在这里可以找到一个元素:

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

如何使用.not()功能实现此选择?类似于以下内容:$('.select').not($(this).parents().hasClass('.forbidden'));

您需要检查父元素,closest()会停在该类中找到的第一个元素处,如果选择器有长度,即包含元素,则DOM树上的某个位置就有该类的元素。

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

我不会使用:not

但我会使用过滤器:

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

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

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