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> 

我们如何编写一个选择器来选择all divs with class b除了谁的孩子之外<p>not me</p>

4

6 回答 6

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";
});

现场演示

于 2012-06-13T09:58:55.633 回答
3

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

由于您正在专门寻找为class b您制作的演示,因此分享。

在此演示中,您将看到 not me 逐渐消失,其余部分将保持原样。

即用:not+:has可以做到

代码

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

或者

$('div.b:not(:has(p))')
于 2012-06-13T10:01:51.307 回答
1
$('div.b').filter(function () {
    return $(this).find('p:contains(not me)').length == 0;
})

jsFiddle 演示

于 2012-06-13T10:05:02.110 回答
1

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

现场演示

$('div.b:not(:has(p))')
于 2012-06-13T10:12:14.570 回答
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> 
于 2012-06-13T10:21:06.660 回答
0

这是另一个

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

编辑:对不起,这里没有

$("div.b:not(:contains('not me'))")
于 2012-06-13T10:05:58.003 回答