选择除一个之外的所有div

3
<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?
6个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10
$('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";
});

演示实例


或者两种选项之间的折中方案:$('div.b').not(':has(p)')。关于最后一种选项,我知道示例标记没有这个问题,但是如果特定的 div 有多个段落怎么办? - nnnnnn

3

演示 http://jsfiddle.net/46nC5/1/

因为您特别寻找的是 class b,所以我为您制作了一个演示并分享给您。

在这个演示中,您将看到“not me”被淡出,其余内容保持不变。

即使用 :not + :has 可以实现此操作。

代码

$('div.b:has(p)').​

或者

$('div.b:not(:has(p))')

1
$('div.b').filter(function () {
    return $(this).find('p:contains(not me)').length == 0;
})

jsFiddle演示


1
这将为您提供具有class="b"不包含p(段落)的两个div

在线演示

$('div.b:not(:has(p))')

1
我通常做的最好的方法是:
$('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> 

0

这里还有另一个

$("div.b:contains('not me')")

更正:抱歉,这里应该是“不”而不是“与”

$("div.b:not(:contains('not me'))")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,