5

2 つの not 節を持つ特定のノードを選択したいのですが、これまでのところ成功していません。私がする必要があるのは、divに文字列0008が含まれている要素を選択することですが、それは10008ではなく、タグ「スタイル」も含まれていないため、理論的には次のように機能するはずです:

document.querySelectorAll(" div[id*='0008']:not([id='10008'][style])")

ただし、ご想像のとおり、そのようには機能しません。

document.querySelectorAll(" div[id*='0008']:not([id='10008'])")
document.querySelectorAll(" div[id*='0008']:not([style])")

もちろん、どちらも個別に完全に機能します。

4

3 に答える 3

10

10008ではなく、また…</ p>

これは、現在のセレクターがチェックするものではなく、(idおよびstyle属性)がないかどうかをテストします。代わりにこれを使用してください:

div[id*='0008']:not([id='10008']):not([style])

元のソリューションも有効なセレクターではありませんでした。単純なセレクター:not()が1つしか含まれていない可能性があるのに対し、2つあるためです。それでも、jQueryのsizzleエンジンのようなセレクタライブラリはそれらをサポートするかもしれません。したがって、jQueryを使用すると、以下も機能します。

div[id*='0008']:not([id='10008'],[style])
于 2013-02-14T22:08:15.510 に答える
2

jsFiddleデモ

論理的には、両方に一致する要素ではなく、2つの不要なセレクターのいずれかに一致する要素を除外しようとしています。jQueryでは、複数のセレクター(不要な要素すべてに一致し、その後否定されます)は、単にコンマで区切られたリストです。したがって、これを行うだけです。

$("div[id*='0008']:not([id='10008'],[style])")

jQueryドキュメントから(この質問はjQueryとタグ付けされているため):

すべてのセレクターは:not()、たとえば::not(div a)および。内で受け入れられ:not(div,a)ます。

于 2013-02-14T22:06:36.817 に答える
0

私はただするだろう:

var elems = $('div[id*="0008"]').filter(function() {
    return !this.hasAttribute("style") && this.id == '10008';
});

私は実際にこれを取得するとは思わないが、これは除外されます:

<div id="10008" style="color: black">10008</div>

だがしかし:

<div id="10008">10008</div>

IDはもちろん一意であり、これには実際のユースケースが存在する可能性がありますが、IDを除外した後は、なぜ正確に行うのかというように、通常は別の方法で処理するエッジケースのようです。スタイルタグも一致させる必要がありますか?

于 2013-02-14T22:06:50.113 に答える