猜测以下 HTML DOM 的正文片段:
...
<div class="entry">
<div class="evil">
<div class="some-other-class">
<pre>My foo text</pre>
</div>
</div>
</div>
<div class="entry">
<div class="nice">
<pre>My nice text</pre>
</div>
</div>
...
使用 jQuery,我想选择所有<pre>
属于 type 的父元素div.entry
并且不是 a 的后代的元素div.evil
。更准确地说:我只想将特定类应用于那些“非邪恶”<pre>
元素。
在应用类之前,我使用了:not
选择器过滤器以及.not()
构建链以选择适当的子集和后代元素的方法,如下所示:
$("div.entry div:not(.evil) pre").addClass("pretty");
或者:
$("div.entry").not("div.evil").find("pre").addClass("pretty")
这两种变体都会匹配所有pre
元素,包括带有“邪恶”父 div 的元素!
但是,当我像这样选择直接父级和类时:
$("div.entry div:not(.some-other-class) > pre").addClass("pretty");
它按预期工作。首先,我以为我误解了使用element1 element2
. 使用链式过滤器方法没有成功,但证明肯定有其他问题。
这个问题本身听起来并不难,但它现在让我发疯了。
如果以及为什么我的选择方式可能是错误的,有什么想法吗?