如何删除jQuery组中其他成员的后代元素

How can I remove elements of a jQuery group that are descendants of other members?

本文关键字:其他 成员 元素 后代 jQuery 何删除 删除      更新时间:2024-03-11

假设我收集了一组与某个选择器匹配的jQuery DOM节点,并且该选择器使得一些匹配的节点可能是其他匹配的后代,例如:

<div class="row">
    <!-- ... -->
    <div class="row"><!-- ... --></div>
    <!-- ... -->
</div>
<div class="row">
    <!-- ... -->
    <div class="row">
        <!-- ... -->
        <div class="row"><!-- ... --></div>
    </div>
    <div class="row"><!-- ... --></div>
    <!-- ... -->
</div>
$rows = $('.row');

现在假设我要采取的操作将影响每个节点的整个子树,并且我需要确保我最多对任何给定的DOM节点执行一次操作。如何删除我的组中属于同一组其他成员后代的所有元素?

我发现实现这一点的最简单、最干净的方法是将$.fn.not()$.fn.find():的行为结合起来

var $rows = $('.row');
$rows = $rows.not($rows.find($rows));

$elems.find($elems)将返回$elems的所有成员,这些成员是$elems的一个或多个成员的后代(不包括元素本身,因此不用担心)。$elems.not(group)将仅返回不在group中的$elems的成员。这将一起查找作为其他成员的子级的$elems的所有成员,然后返回其他所有成员。