选择除一个以外的所有 div

Posted

技术标签:

【中文标题】选择除一个以外的所有 div【英文标题】:Selecting all divs except one 【发布时间】:2012-06-16 06:25:28 【问题描述】:
<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,除了&lt;p&gt;not me&lt;/p&gt;的孩子?

【问题讨论】:

【参考方案1】:
$('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";
);

Live DEMO

【讨论】:

或介于两个选项之间:$('div.b').not(':has(p)')。关于最后一个选项,我知道示例标记没有这个问题,但如果特定 div 有多个段落怎么办?【参考方案2】:

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

由于你是专门找class b所以做了一个demo给你分享一下。

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

即使用:not + :has 可以做到

代码

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

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

【讨论】:

【参考方案3】:
$('div.b').filter(function () 
    return $(this).find('p:contains(not me)').length == 0;
)

jsFiddle Demo

【讨论】:

【参考方案4】:

我通常做的最好的方法:

$('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> 

【讨论】:

【参考方案5】:

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

Live Demo

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

【讨论】:

【参考方案6】:

还有一个

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

编辑:对不起,这里没有

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

【讨论】:

以上是关于选择除一个以外的所有 div的主要内容,如果未能解决你的问题,请参考以下文章

jQuery首先选择all

css3有没有除第一个子元素以外的元素的选择器

css3有没有除第一个子元素以外的元素的选择器

选择除 div 之外的所有元素不适用于 jQuery

如何使用 jQuery 选择除过滤器元素之外的所有子元素

禁用除第一行以外的所有行,并在上面的行充满数据时启用每一行