我正在尝试找到一种使用jQuery查找元素的方法,但忽略了容器嵌套的方法。在下面的例子中,我需要选择第二个'findMe'而不是第一个。中间可以有许多区域,锚点和其他容器,但只有两个区域。最简单的例子是:
<div class="zone">
<div class="zone">
<a class="findMe"></a>
</div>
<a class="findMe"></a>
</div>
ie:我正在寻找类似于异或的东西:
$allZoneAnchors = $('.zone a');
$nestedAnchors = $('.zone .zone a');
//Then somehow XOR $allZoneAnchors and $nestedAnchors
jQuery .filter
看起来很有趣但你用它来
将匹配元素集合减少到与选择器匹配的元素......
当我想要的是将匹配元素集('.zone a')减少到与选择器不匹配的元素('.zone .zone a')
例如:
$('.zone a').filterOutThingsThatMatch('.zone .zone a')
.not()似乎不允许我执行“不具有嵌套容器的东西”的要求。
答案 0 :(得分:3)
在not
中对嵌套状态进行第二次测试:
$anchors = $('.zone a').not('.zone .zone a');
字面上说&#34;在区域类下找到我的所有锚点,但是如果锚点位于区域类#34下的区域类下则不行。此版本适用于任何深度,即使区域级别之间还有其他div。
如果您知道它们是固定的深度,可能更快一点:
$anchors = $('.zone > a').not('.zone > .zone > a');
答案 1 :(得分:0)
如果我理解正确,你可以使用单个CSS选择器:
var $nestedAnchors = $(':not(.zone) .zone a');
您将匹配不在另一个.zones
下的所有.zone
:not(.zone)
是*:not(.zone)
的捷径,所以任何元素都不是&#39; .zone&#39;
或jQuery .not()
var $('.zone a').not('.zone .zone a');
因为选择器jQuery解决方案的复杂性可能要快得多。