Javascript 选择除一个div之外的所有div

Javascript 选择除一个div之外的所有div,javascript,jquery,jquery-selectors,dom-traversal,Javascript,Jquery,Jquery Selectors,Dom Traversal,不是我 我们如何编写一个选择器来选择所有b类div,除了其子级是而不是我的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">

不是我

我们如何编写一个选择器来选择
所有b类div
,除了其子级是
而不是我的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> 
还是可读版本

$('div.b:not(:has(p))').........
如果您也想匹配内容,请执行以下操作:

$('div.b').filter(function(){
    return !$(this).find('p').length;
});
演示

由于您专门寻找
b类
,因此为您制作了一个演示,并与大家分享

在这个演示中,您将看到“不是我”逐渐淡出,其余的将保持原样

i、 e.使用
:not
+
:has
可以完成

代码

$('div.b').filter(function(){
    return $(this).find('p').text() !== "not me";
});

$('div.b:has(p)').​
这是另一个

$('div.b').filter(function () {
    return $(this).find('p:contains(not me)').length == 0;
})
编辑:对不起,这是一张没有

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

这将给你两个div,他们有class=“b”,而没有p(段落)


我通常做的最好的方式是:

$('div.b:not(:has(p))')
$('div.b')。过滤器(函数(){
return!$(this.hasClass('notMe');
});
不是我


或两个选项之间的中间值:
$('div.b')。not('has(p)')
。关于最后一个选项,我知道示例标记没有这个问题,但是如果一个特定的div有多个段落呢?
$("div.b:not(:contains('not me'))")
$('div.b:not(:has(p))')
$('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>