【问题标题】:Select all elements that are not descendents of elements with a certain class选择不是某个类的元素后代的所有元素
【发布时间】:2011-11-21 15:06:10
【问题描述】:

我正在尝试提出一个选择器,它将选择所有 textarea 元素,除了那些是 .noSpell 类的后代的元素。

所以我希望这个匹配:

<div>
   <textarea />
</div>

但不是这个

<div class="noSpell">
   <div>
      <textarea />
   </div>
</div>

我试过了:

$(":not(.noSpell) textarea")

但它不起作用,大概是因为虽然它不会匹配外部元素,但它可以匹配任何内部元素。

那么,我将如何编写一个选择器来根据类名排除 DOM 树的某些部分?

【问题讨论】:

  • 尝试使用一些有效的 HTML:&lt;textarea&gt;&amp;nbsp;&lt;/textarea&gt;
  • &lt;textarea /&gt; 是有效的 XHTML(不兼容 HTML,但有效)。不过,在其中填充一个不间断的空间可能不是一个好主意。
  • 该死的,我总是添加那些愚蠢的 nbsps!原谅错误。 OP 从未指定它是 HTML 还是 XHTML。在 HTML 中,这会中断,您最终会在 textarea 中看到“
    ”。

标签: javascript jquery css jquery-selectors


【解决方案1】:

这个怎么样:

$("textarea").not(".noSpell textarea")

所有文本区域,然后删除父级为 .noSpell 的文本区域。

【讨论】:

  • 你可以选择它为textarea:not(.noSpell textarea)。谢谢,这就是我想要的。
【解决方案2】:

以下对我有用:

$("textarea").not(".noSpell");

在 firefox/firebug 中测试。

【讨论】:

  • 这将排除属于 noSpell 类成员的文本区域,而不是属于该类成员的 div 的后代的文本区域。 Tested here
  • 啊,我明白了,我需要在 not 里面添加“textarea”,哎呀
【解决方案3】:

@cdmckay 你的方法也对。

尝试创建 textarea 为:

<textarea></textarea> 

看看你的代码是否有效。

您可能希望这样做以查看您的代码是否有效

if($(":not(.noSpell) textarea").length > 0) {
    alert("there");
}
else {
    alert("not there");
}

干杯!

【讨论】:

  • 那行不通,因为这将匹配 textareas 除非 所有 他们的祖先都是 noSpell 类的成员(即父母,祖父母,等等,直到你得到body 元素和 html 元素)。
猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多