「すべてではない」jQueryセレクター


89

次のように、HTMLマークアップ内のすべてのdivを(jQueryを使用して)選択できます。

$('div')

しかし、私は上記の選択から特定のdiv(たとえば持っているid="myid")を除外したいと思います。

Jquery関数を使用してこれを行うにはどうすればよいですか?


2
jqueryでnotセレクターを使用する
abhijit 2011年

回答:


171

シンプル:

$('div').not('#myid');

を使用.not()すると、によって返されるセットから、指定されたセレクターに一致する要素が削除され$('div')ます。

:not()セレクターを使用することもできます。

$('div:not(#myid)');

どちらのセレクターも同じことをし:not()ますが、おそらくjQueryのセレクターエンジンSizzleがネイティブ.querySelectorAll()コールに最適化できるため、より高速です。


1
@Raynosは、私はそれが必ずしもないと思う悪い、しかし、使用して.not()いるはるかに、はるかに優れてより:not()
ボジャングル2011年

1
私はそれが$('div:not(#myid)');(引用符なしで)あるべきだと思います。@Raynos:なぜですか?:not()CSS3セレクターです。jQueryはquerySelectorAll、サポートされている場合、セレクターを直接渡すことができます...
Felix Kling 2011年

一部としての罰金を@FelixKling selectors4。ただし、jQueryでは、それよりも遅く、.not読みにくくなります。「:jQueryのセレクターではない」と言うべきだった
Raynos 2011年

@Raynos:セレクター仕様で:not()。内の引用符を許可したことはありません。このセレクターはセレクター4の新機能ではなく、引用符を使用できるように変更されていません。ただし、より複雑なセレクターを許可するように変更されました。私があなたのコメントを誤解しない限り
...– BoltClock

1
@PeterKrauss最速としてマークされているjsPerfベンチマークを実行しquerySelectorAllました。実際のベンチマークではありませんが、jQuery内部からのオーバーヘッドがないため、予想されます。:not()おそらくSizzleが使用するように最適化できることを知っているため、実際には高速ですquerySelectorAll()
Bojangles 2017年

9
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);

昔ながらの方法でそれを行うことができます。とてもシンプルなものでjQueryは必要ありません。

プロのヒント:

dom要素のセットは単なる配列なので、でお気に入りのtoArrayメソッドを使用しますNodeList

セットに要素を追加するだけです

set.push.apply(set, arrOfElements);

セットから要素を削除することは

set.splice(set.indexOf(el), 1)

一度に複数の要素を簡単に削除することはできません:(


1
最近(2017年)では、おそらくネイティブJavascript.querySelector()または.querySelectorAll()withの使用 div:not(#myid) がより高速です...そうですか?
ピータークラウス2017年


4
   var elements =  $('div').not('#myid');

これには、IDが「myid」のdivを除くすべてのdivが含まれます。




3

.notjQueryライブラリのプロパティを使用します。

$('div').not('#myDiv').css('background-color', '#000000');

実際に見てください ここください。div#myDivは白になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.