jQueryのクラスセレクタではない


271

特定のクラスの要素を選択しない単純なセレクター式はありますか?

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />

最初の3つのdivを取得して試してみました

$(div[class^="first-"][class!="first-bar"])

しかし、最後のdivにはfirst-bar以上のものが含まれているため、これはすべてを受け取ります。そのような式でプレースホルダーを使用する方法はありますか?そんな感じ

$(div[class^="first-"][class!="first-bar*"]) // doesn't seem to work

役立つ他のセレクターはありますか?


以前のコメントをスクラッチして、質問を読み直します。重要なクラスはfirst-barです。
BoltClock

場合1は、仕事と連結し、いずれかのクラス1またはクラス2を持っていないすべての要素を選択したい:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

回答:


544

:not()セレクターが必要です:

$('div[class^="first-"]:not(.first-bar)')

または、代わりに、.not()方法:

$('div[class^="first-"]').not('.first-bar');

91
:not()は.not()(jsperf.com/jquery-css3-not-vs-not)より最大2〜3倍高速であるため、:not()を使用することもできます。ただし、jQueryのドキュメントでは、読みやすい(api.jquery.com/not-selector)ため、代わりに.not()の使用を推奨しています。これが誰かが2つの間の決定をするのに役立つことを願っています!
rinogo 2013

2
@rinogo大多数のブラウザーがquerySelectorAllをサポートするようになりましたが、常にそうであるとは限りません。
2013

4
そうだね!:)私のコメントが批判として出てこなかったことを願っています。私はむしろあなたのすでに役に立つ質問に付け加えるつもりでした。
rinogo

1
ありがとう!! フィルタリングボックス以外のすべてでEnterキーを無効にします。$( "input:not(.rgFilterBox)")。keydown(function(e){if(e.keyCode == 13){return false;} return true;});
hardba11 2013

3
それがあれば@Danielは、はい、しかしである、それは:)インスタントのパフォーマンスの向上を取得するための超簡単チェンジだ
rinogo

85

:notフィルターセレクターを使用できます。

$('foo:not(".someClass")')

またはnot()メソッド:

$('foo').not(".someClass")

より詳しい情報:


3
"CSSセレクタとしてそれを使用している場合は省略されなければなりません。
BoltClock

17
@BoltClock:スペースが含まれる値に必要です。それらを常に指定するのが私の習慣になっています:)
Sarfraz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.