【问题标题】:jQuery combination of :not + :contains, does it work?:not + :contains 的 jQuery 组合,它有效吗?
【发布时间】:2012-06-13 11:09:46
【问题描述】:

(continue from other question)

<div id="main">
    <div class="a">aaaa</div>
     <div class="b"><p>not me</p></div>
     <div class="b">bbbb</div> <!-- select this-->
     <div class="b">bbbb</div> <!-- select this-->
     <div class="c">cccc</div>
</div> ​

我正在尝试选择所有类为 b 且其中没有 &lt;p&gt;not me&lt;/p&gt; 的 div。

我试过了:

$('div.b:not(:has(p:contains(not me)))').css('color', 'red'); 

但由于某些未知原因它不起作用,有趣的是,如果我删除 :not() 部分:

$('div.b:has(p:contains(not me))').css('color', 'blue');

它确实选择了不需要的 div,所以问题一定出在:not

Live DEMO

我知道还有其他甚至更好的方法,(我什至在那个问题中给出了一些)但我很想知道为什么 :not + :contains 似乎不在一起。

【问题讨论】:

  • @eric.itzhak。请阅读最后一段...或其他问题。
  • 我认为 :not 应该与 :has... 一起工作
  • 我认为罪魁祸首是:has 而不是:not
  • @undefined。它们可以一起工作。

标签: javascript jquery jquery-selectors


【解决方案1】:

您可以使用.not 而不是:not

$('div.b').not(':has(p:contains("not me"))').css('color', 'red');

Updated fiddle

【讨论】:

  • 我知道,我问的是:not 选择器。但感谢您的意见,如果不可能,我会接受。
  • @gdoron::not 和/或:has 存在一些错误,这可能是其中之一... :-)
  • Badge我现在第二次...:)
  • @gdoron haha​​,恭喜。
  • 虽然我决定从 SO 休息几个月,但我认为您可能想阅读this ticket(是的,这是一个错误,它已在 1.8 中修复)
【解决方案2】:

工作示例 :not + :contains

$('div.b:not(:contains("not me"))').css('color', 'cyan');

将更改所有不包含“not me”的 div.b 的颜色。

【讨论】:

  • 确实应该是:not(:contains("not me")。它没有考虑到 div 应该有一个 p 元素作为子元素。
  • 不管它是否包含 p,它都可以工作。我误会你想说什么了吗?
【解决方案3】:

我认为这与:has有关

试试这个:

$('div.b:not(:contains(not me))').css('color', 'red');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2016-06-15
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多