<div id="main">
<div class="a"></div>
<div class="b"><p>not me</p></div>
<div class="b"></div>
<div class="b"></div>
<div class="c"></div>
</div>
我们如何编写选择器来选择所有具有类b的div,但不包括其子元素是not me
的div?<div id="main">
<div class="a"></div>
<div class="b"><p>not me</p></div>
<div class="b"></div>
<div class="b"></div>
<div class="c"></div>
</div>
我们如何编写选择器来选择所有具有类b的div,但不包括其子元素是not me
的div?$('div.b:not(:has(p))').........
或者可读版本
$('div.b').filter(function(){
return !$(this).find('p').length;
});
如果您想同时匹配内容:$('div.b').filter(function(){
return $(this).find('p').text() !== "not me";
});
演示 http://jsfiddle.net/46nC5/1/
因为您特别寻找的是 class b
,所以我为您制作了一个演示并分享给您。
在这个演示中,您将看到“not me”被淡出,其余内容保持不变。
即使用 :not
+ :has
可以实现此操作。
代码
$('div.b:has(p)').
或者
$('div.b:not(:has(p))')
$('div.b').filter(function () {
return $(this).find('p:contains(not me)').length == 0;
})
$('div.b').filter(function () {
return !$(this).hasClass('notMe');
});
<div id="main">
<div class="a"></div>
<div class="b notMe"><p>not me</p></div>
<div class="b"></div>
<div class="b"></div>
<div class="c"></div>
</div>
这里还有另一个
$("div.b:contains('not me')")
更正:抱歉,这里应该是“不”而不是“与”
$("div.b:not(:contains('not me'))")
$('div.b').not(':has(p)')
。关于最后一种选项,我知道示例标记没有这个问题,但是如果特定的 div 有多个段落怎么办? - nnnnnn