2012-04-16 11 views
2

私はjQueryの初心者です。 [name = value]セレクタを使用するときに問題が発生しました。右、jQueryセレクタ[name = value]が機能しません。

<input type="number"/> 

非常にシンプル:ここ はHTMLのですか? そして、ここでは、JSです:

$("input").val(100); 
$("input[value='100']").val(200)​ 

結果は次のとおりです。スクリプトの最初の行は動作しますが、ない二行目(Chromeは、FF、IE9) 両ラインはIE8で動作します。 これはどうしますか?ところで、私はjQuery1.7.2を使用しています。それとも、ただセレクタが属性をチェックしますが、.val()は専用のプロパティを変更し、そのセレクタは更新を見ていない属性は、等しいhttp://jsfiddle.net/wzKNV/

+0

クイックや汚れが動作します。 val()は属性ではなく属性であり、このシナリオでは属性セレクタは機能しません。私はjsfiddleを作成し、要素を複製して分離を示しました。 http://jsfiddle.net/7PZdt/ – Ohgodwhy

答えて

6

に上記のコードをテストすることができます。

jQuery/Sizzleがこの「属性のみ」の動作を強制するデフォルトのメソッドquerySelectorAllです。シズルセレクタは必ずしもqSAセレクタに準拠していないので、これはある

シズルを使用する必要がありますようにあなたは、querySelectorAllのためのセレクタを壊した場合、それは動作します...

// v------made it a non-standard Sizzle selector 
$(":input[value='100']").val(200); 

。もちろん、これはセレクタの意味を少し変更しますが、説明のために役立ちます。

DEMO:http://jsfiddle.net/wzKNV/3/


(IMOは良いアイデアです)標準のセレクタを使用して、それを維持するために、あなたの代わりにfilter()を使用することができます...

$("input").filter(function() { return this.value === '100'; }) 
      .val(200); 

デモ:http://jsfiddle.net/wzKNV/4/

+0

jQueryセレクタとqSAセレクタの両方で本当に教えてください。 –

+0

なぜ、セレクタAPIも実装されているので、元のコードの両方の行がIE8で動作するのは不思議です。おそらく、そのブラウザで何か他のことが起こっているでしょう。 – BoltClock

+0

@ BoltClock'saUnicorn:IE8で*の要素にプロパティを追加すると、その属性が変更されるように見えます。 http://jsfiddle.net/9bCCR/カスタムプロパティでも 'getAttribute'を使っていました。 IE9は正しく動作するようです。 –

0

<input type="nubmer" disabled="disabled" value="100" />​ // your fiddle have no `value` 

場合、

$("input[value='100']").val(200)​​​​​​​ 

が、これは私が使用する方法であり、

関連する問題