HTMLDOMの次の本文スニペットを推測します。
...
<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>
...
<pre>
jQueryを使用して、タイプの親要素に属し、の子孫ではないdiv.entry
すべての要素を選択したいと思います。より正確には、特定のクラスをそれらの「非悪」要素にのみ適用したいと思います。div.evil
<pre>
次に示すように、クラスを適用する前に、:not
セレクターフィルタと、.not()
適切なサブセットと子孫要素を選択するためのチェーンを構築する方法を使用しました。
$("div.entry div:not(.evil) pre").addClass("pretty");
そして代わりに:
$("div.entry").not("div.evil").find("pre").addClass("pretty")
両方のバリアントにより、「邪悪な」親divを持つ要素を含むすべての要素が一致します。pre
ただし、次のように直接の親とクラスおよび子を選択すると、次のようになります。
$("div.entry div:not(.some-other-class) > pre").addClass("pretty");
期待どおりに動作します。最初は、を使用した子孫要素の選択を誤解していると思いelement1 element2
ました。連鎖フィルター法を使用しても成功しなかったが、他の何かが間違っているに違いないことが証明された。
問題自体は難しいようには聞こえませんが、今では私を悩ませています。
私の選択方法が間違っている可能性がある場合、そしてその理由はありますか?