2009-07-02 12 views
45

することにより、特定の属性を持たない要素が、私は特定の属性を持つ要素を取得する方法を知ってもらうことができますか? 試してみますは、どのように私はjQueryの

$("#para :not([attr_all])") 

しかし、動作しません。 これを行う正しい方法は何ですか?

私は例をあげてみましょう:

<div id="para"> 
    <input name="fname" optional="1"> 
    <input name="lname"> 
    <input name="email"> 
</div> 

のjQuery:

$("#para [optional]") // give me the fname element 
$("#para :not([optional])") //give me the fname, lname, email (fname should not appear here) 

答えて

18

まず最初に(多分サブ最適):

$('p').filter(function(){ 
    return !$(this).attr('attr_all'); 
}); 

しかしp:not([attr_all])は動作するはずですので、私は何か他のものは、あなたのコード内で起こっていると思います。

+1

私は最終的に解決しました問題はそれがコードの別の部分によって引き起こされたので、私はこれを答えとしてマークします。 – Billy

+5

より高いupvotesと下記の答えを参照してください。 – WildService

5

$("#para [attr!=val]")を試してみてください。

あなたの:notは本当にうまくいくはずですが、これは他のことが起こっていると思わせてくれます。

属性セレクタの完全なリストについては、jQuery Selectors docsを参照してください。私の心に来る

+0

動作しません。 – Billy

+0

ええ、あなたの問題は、このセレクタではなく、コンテキストにあると思います。 – chaos

+0

+1。このセレクタはJQuery固有のものであることに注意してください。 CSS属性セレクタとして定義されていないので、CSSを使用してスタイルを設定するための要素をターゲットにすることはできません:http://www.w3.org/TR/CSS2/selector.html#attribute-selectors – PatrikAkerstrand

102

コード例が使用しているコードと完全に同じであれば、問題は誤ったスペースだと思います。あなたがそこにスペースを残す場合は

$("#para :not([attr_all])") 

$("#para:not([attr_all])") 

する必要があり、それは子孫#paraを選択します。

+7

これは正しい答えです –

+3

これは正しい答えです、親指 –

+9

しかし、元の質問から、OP **は子孫を選択することを望んでいます! –

7

これを行うより速い方法は、ID para(複数ある場合は無効なHTMLです。クラスを使用することを検討してください)のすべての要素を取得してから、そのフィルタを使用しますHTMLが構築される)メソッドだけなので、のような属性を持たない要素を取得するには:

$('#para').filter(':not([attr_all])'); 

あなたが唯一の属性のないものを得るための要素の小さなサブセットをループしているので、jQueryのはるかに少ない仕事を持っているこれを行うに。単一のセレクターステートメント、例えば$("#para :not([attr_all])")でそれを実行すると、jQueryは属性のないすべての要素を取得し、IDがparaのものについてフィルターします。

1

フランク・デロサの答えは正しいですが、OPが子孫を見つけたいので、少し離れています。それを自分自身で試してみると、それはそのように動作するはずですが、あなたが実行しているものは、子孫として直接使用される ':'演算子が好きではない可能性があります。お試しください

$("#para input:not([optional])") 

コメントはまだありません。

+1

あるいはもっと幅広いセレクタがあります: '$("#para *:not([optional]) ")' – Gideon