查找没有具有特定类

时间:2018-04-06 15:32:01

标签: javascript jquery html tree-traversal

在HTML元素的页面中,我试图使用JQuery找到一个类.dmc的父元素,该元素不包含具有特定类.dynamic的直接子元素。

我试过了:

$('.dmc:not(:has(.dynamic))')

然而,这会检查所有后代,我只想检查第一级后代。

我认为有一个非常简单的答案,但我无法想出它。任何帮助赞赏!

1 个答案:

答案 0 :(得分:2)

由于:has已经是jQuery特有的,你可以使用一个无根的>,jQuery的Sizzle选择器引擎似乎支持:

$(".dmc:not(:has(> .dynamic))").addClass("green");
// --------------^

$(".dmc:not(:has(> .dynamic))").addClass("green");
.green {
  color: green;
  font-weight: bold;
}
<div class="dmc">1</div>
<div class="dmc">2
  <div class="dynamic">dynamic</div>
</div>
<div class="dmc">3</div>
<div class="dmc">4
  <div class="dynamic">dynamic</div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

但是我会稍微担心一下,可能会选择filter

$(".dmc").filter(function() {
  return $(this).children(".dynamic").length == 0;
}).addClass("green");

$(".dmc").filter(function() {
  return $(this).children(".dynamic").length == 0;
}).addClass("green");
.green {
  color: green;
  font-weight: bold;
}
<div class="dmc">1</div>
<div class="dmc">2
  <div class="dynamic">dynamic</div>
</div>
<div class="dmc">3</div>
<div class="dmc">4
  <div class="dynamic">dynamic</div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>