2011-01-06 10 views
191

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

<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要素が最初にバーを超えていて、これはすべて受信します。このような式でプレースホルダを使用する方法はありますか?そのようなもの

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

その他の選択肢はありますか?

+0

私の以前のコメントをスクラッチ、私は質問を再読。クリティカルクラスは 'first-bar'です。 – BoltClock

+0

class1またはclass2のいずれも持たない要素をすべて選択したい場合、 '$( 'div [class^=" first - "]')。not( '。class1')。not( ' .class2 ') ' – J0ANMM

答えて

391

あなたは:not()セレクター必要があります。

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

またはnot()方法:あなたが:notフィルタセレクタを使用することができます

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

not:not()は.not()(http://jsperf.com/jquery-css3-not-vs-not)よりも2-3倍高速ですので、次のことに注意してください。使用しない:not()。しかし、jQueryのドキュメントでは、読みやすくなっているので、代わりに.not()を使用することをお勧めします(http://api.jquery.com/not-selector/)。これは誰かが2つの間で決定を下すのを助けることを望みます! – rinogo

+1

@rinogo大多数のブラウザがquerySelectorAllをサポートするようになりましたが、これは必ずしもそうではありません。 – lonesomeday

+3

うん、まさに! :)私のコメントが批判として出てこないことを願っています。むしろあなたのすでに役に立つ質問に追加することを意図しました。 – rinogo

66

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

、あるいは、.not()方法:

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

詳細:

+2

CSSセレクタとして使用する場合は、 '' 'を省略する必要があります – BoltClock

+14

@BoltClock:これは必要ですその中にスペースを入れた値のために、私はそれらを常に指定する私の習慣を作りました:) – Sarfraz

関連する問題