假设我收集了一组与某个选择器匹配的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
的所有成员,然后返回其他所有成员。