当前位置: 代码迷 >> JavaScript >> jQuery Exclusive OR
  详细解决方案

jQuery Exclusive OR

热度:26   发布时间:2023-06-07 16:44:08.0

我正在尝试找到一种使用jQuery查找元素的方法,但忽略那些嵌套了容器的元素。 在下面的示例中,我需要选择第二个“ findMe”,而不是第一个。 在它们之间可以有许多区域,锚点和其他容器,但是只有两个级别的区域。 最简单的示例是:

<div class="zone">
    <div class="zone">
        <a class="findMe"></a>
    </div>
    <a class="findMe"></a>
</div>

即:我正在寻找类似异或的东西:

$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()似乎不允许我执行“没有嵌套容器的操作”要求。

只需对not中的嵌套状态进行第二次测试:

$anchors = $('.zone a').not('.zone .zone a');

字面意思是“在区域类下找到我的所有锚点,但是如果锚点在区域类下的区域类下面,则不是”。 此版本适用于任何深度,甚至区域级别之间还有其他div。

如果您知道它们的深度是固定的,则可能会更快一些:

$anchors = $('.zone > a').not('.zone > .zone > a');

如果我理解正确,则可以使用单个CSS选择器:

 var $nestedAnchors  = $(':not(.zone) .zone a');

你会匹配所有.zones是不是在另一个.zone

:not(.zone)*:not(.zone)因此任何元素(但不是'.zone')

或jQuery .not()

var $('.zone a').not('.zone .zone a');

因为选择器jQuery解决方案的复杂性可能会大大提高。

  相关解决方案