我知道这已被多次询问,我已经尝试了所有的建议,并阅读了所有关于不同的选择器,等等,但没有什么对我有用
给出以下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)
基本上,获取所有,然后删除任何应该"排除"