1

我正在尝试选择.select嵌套在 DOM 树中某处的类的所有元素。
唯一的限制是,他们不允许有任何父母与班级在一起.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'));

4

3 回答 3

6

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

$('.select').filter(function(){
     return !$(this).closest('.forbidden').length;
});
于 2012-08-21T14:52:47.100 回答
4

我不会使用:not.

但我会使用过滤器

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

请注意,如果集合中的至少一个元素(这里是父元素)与选择器匹配,则返回 true。

于 2012-08-21T14:51:14.700 回答
3
$('.select').filter(function() {
    return $(this).closest('.forbidden').length == 0;
});
于 2012-08-21T14:51:01.237 回答