jQuery Exclusive OR

时间:2015-07-16 08:39:23

标签: javascript jquery xor

我正在尝试找到一种使用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()似乎不允许我执行“不具有嵌套容器的东西”的要求。

2 个答案:

答案 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解决方案的复杂性可能要快得多。