2011-05-29 13 views
37

私は、次の作業を取得するように見えるカント: jQuery - not()内の複数セレクタ:

$('input:not([type=radio][type=checkbox])').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 

は、誰もがこの1に私を助けることができ、いくつかの異なる構文のを試してみました。

乾杯
チャーリー

+0

の可能重複[jQueryの - 複数:いないセレクタ(http://stackoverflow.com/questions/7144976/jquery-multiple-not-selector) –

答えて

67

あなたはmultiple attribute selectormultiple selectorを混乱しています。あなたは書く必要があります:

$("input:not([type=radio], [type=checkbox])"); 

複数の属性セレクタ[type=radio][type=checkbox]は、この宇宙で起こることができないそのtype属性両方radiocheckboxに等しい要素を、一致しました。

+0

パーフェクト〕おかげフレデリック。まるでそれらを間違っているように見える。ブックマーク済み:) –

+0

私は、宇宙全体を話そうとするのではなく、「htmlのこの実装では起こり得ない」と言うのがより真実だろうと思います。それは大きな宇宙ですが、ある種のエイリアンレースはhtmlの実装を持つことができます。これは例えば、与えられた属性の値のコンマ区切りリストを許可します。 (*多くの宇宙学者は、宇宙は実際に無限であると信じていますが、あなたが考えることができるHTMLの実装はどこかに存在します) –

3

not()内の構文は、通常のセレクタ構文と同じです。したがって、どちらのものでもないものと一致させる場合は、両方で一致するセレクタを使用します(本質的に否定しているのでセレクタ)。あなたはどうやってそれをしますか?あなたはそうと、カンマで、一度CSS内で複数のセレクタにスタイルを適用するのと同じ方法:

$('input:not([type=radio],[type=checkbox])') 

ます。また、このような項目を除外することができ、すべての入力ではない[type=radio]なく[type=checkbox]

+3

これはjQueryの ':not()'にのみ適用されます。 CSS3の ':not()'は[シンプルセレクタ](http://www.w3.org/TR/css3-selectors/#simple-selectors-dfn)以外のものを受け入れることはできません。そのため、単純なセレクタ以外のものをjQueryの ':not()'に渡すと、現代のブラウザは 'querySelectorAll()'でセレクタを解析できないため、パフォーマンスヒットが発生する可能性があります(微視的な場合)。 – BoltClock

+0

はい、その説明をいただきありがとうございます。私のCSSの比較では、CSS3セレクターがそのように動作しないことが明確にはなりませんでした。 – darkliquid

0

を選択する必要があります:

$('input').not('[type=radio], [type=checkbox]').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 
関連する問題