jquery:排除孩子

nul*_*ull 7 jquery

我知道这已被多次询问,我已经尝试了所有的建议,并阅读了所有关于不同的选择器,等等,但没有什么对我有用

给出以下HTML:

<div class="class1">
  <p>
   <a>link</a>
  </p>
  <div class="class2 class3">
    <p>
      <font>
        <a>link2</a>
      </font>
    </p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想选择第一个div的<a>标签,但是没有第二个div

我试过了:

$('.class1').not('.class2, .class3')
$('.class1').not('.class2')
$('.class1').not('.class3')
$(".class1:not(.class2)")
$(".class1:not(.class3)")
$(".class1:not(.class2, .class3)")
$("div.class1:not(.class2)")
$("div.class1:not(div.class2)")
$("div.class1:not(div.*)")
Run Code Online (Sandbox Code Playgroud)

等等

我不知道是不是因为第二个div有两个类名,或者因为第二个div的<a>标签不是第二个div的直接子节点(例如有字体标签等等)但我无法排除第二个div.

Pek*_*ica 12

你试过儿童选择器>吗?

div.class1 > p > a
Run Code Online (Sandbox Code Playgroud)

将只选择的直系后代class1.

如果您需要更广泛的规则,我认为您只需要在一个示例中添加一个空格:

$(".class1 :not(.class2) a")
Run Code Online (Sandbox Code Playgroud)

评论更新:这有效:

$(".class1 > :not(.class2.class3) a").css('border','1px solid red');
Run Code Online (Sandbox Code Playgroud)


小智 6

有同样的问题,任何数量的元素可能会阻碍,我的解决方案是:

$('.class1').find("a").not(".class2 a, .class3 a").whatever;
Run Code Online (Sandbox Code Playgroud)

基本上,获取所有,然后删除任何应该"排除"