仅选择与选择器匹配的父节点

Posted

技术标签:

【中文标题】仅选择与选择器匹配的父节点【英文标题】:Select only parent nodes that match the selector 【发布时间】:2019-04-18 22:41:33 【问题描述】:

我正在尝试获取包含.export 类的所有父节点,任何具有.export 类的父节点的子节点都应从选择中跳过。

节点可以出现在树中的任何位置,但需要任何没有具有相同类的父节点的节点。

具有以下 html 结构:

<div class="export"> <!-- Select this one -->
    <div class="export"> <!-- SKIP this one -->
        <!-- Content -->
    </div>
</div>
<div class="export"> <!-- Select this one -->
    <!-- Some more content -->
</div>

【问题讨论】:

【参考方案1】:

您可以使用 jQuery .not() 方法获取它们,例如:

console.log($(".export").not(".export .export").length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="export">
  <!-- Select this one -->
  <div class="export">
    <!-- SKIP this one -->
    <!-- Content -->
  </div>
</div>
<div class="export">
  <!-- Select this one -->
  <!-- Some more content -->
</div>

【讨论】:

【参考方案2】:

您可以使用:not() 查询选择器跳过与选择器中的查询匹配的查询。

$('.export:not(.export >)')

【讨论】:

jQuery 充满了惊喜。这似乎没有记录在案,但它确实有效。

以上是关于仅选择与选择器匹配的父节点的主要内容,如果未能解决你的问题,请参考以下文章

[ jquery 过滤器 offsetParent() ] 此方法用于在选择器的基础之上搜索被选元素有定位的父级元素,仅对可见元素有效

jQuery选择器

010. CSS 选择器

如何使用 jquery 获得精确的 div 标签匹配选择器?

jQuery之层次选择器

js原生dom方法总结