Javascript 如何删除jQuery组中属于其他成员后代的元素?
假设我收集了一组与某个选择器匹配的jQuery DOM节点,该选择器使得某些匹配节点可能是其他匹配的后代,例如:Javascript 如何删除jQuery组中属于其他成员后代的元素?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,假设我收集了一组与某个选择器匹配的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 class="row">
<!-- ... -->
<div class="row"><!-- ... --></div>
</div>
<div class="row"><!-- ... --></div>
<!-- ... -->
</div>
现在假设我将要执行的操作将影响每个节点的整个子树,我需要确保我最多对任何给定的DOM节点执行一次操作。如何删除属于同一组其他成员后代的组中的所有元素?我发现实现这一点的最简单、最干净的方法是将
$.fn.not()
和$.fn.find()的行为结合起来:
$elems.find($elems)
将返回$elems
的所有成员,这些成员是$elems
的一个或多个成员的后代(不包括元素本身,因此不必担心)$elems.not(组)
将仅返回不在组中的$elems
的成员。这将一起查找属于其他成员子级的$elems
的所有成员,然后返回所有其他内容。如果顶级.row
元素是公共父级的后代,请使用直接后代选择器:$(“#parent>.row”)
当然,在某些情况下可以工作,但我更感兴趣的是一个更通用的解决方案,它在DOM可能更加分散和不可预测的情况下仍然有效。
var $rows = $('.row');
$rows = $rows.not($rows.find($rows));