0

.aa_ant値を含む のクラス名を持つ入力があります1

今、私がこれをやっているページをロードしているとき (ケース 1):

alert($('.aa_ant[value*=1]').length )

期待どおりに出力1されます。

今、私はそれを(CASE 2)に変更しています:

alert($('.aa_ant[value*="1"]').length )

動作を停止します。また、 を に変更する1a、動作も停止します (ケース 1 と 2 の両方)。

私が間違っていることは何ですか?

更新: .aa_ant はノックアウト コントロールです:

<input class='aa_ant' data-bind='value: aa_ant, readOnly: is_readonly' />

それは問題でしょうか?

更新: length プロパティを使用して、その値を含む入力要素があるかどうかを確認したい (要素にその値を持たせたくない)。また、すべての .aa_ant 要素を取得し、それらを列挙して値が含まれているかどうかを確認できることはわかっていますが、jquery っぽいことをしたいと思います。

更新: 参照用の実際のソリューションは次のとおりです。

if($('.aa_ant').filter(関数(インデックス) {
    if(this.value.indexOf("1") >=0) {
        真を返します。
    }
    偽を返します。
}).length>0 ) {
    alert("エラー");
}

助けてくれてありがとう !

4

2 に答える 2

4

valueコントロールに属性がないようです。CSS 属性セレクターは、マークアップで設定されていない場合、要素の属性を読み取ることができないため、失敗します。

これは、宣伝されている CSS 仕様に実際には正確に準拠していない jQuery のケースです。関係なく機能する唯一の理由は、それが有効な CSS セレクターではないためです。そのため、最新のブラウザーではブラウザーのネイティブ セレクター API をスキップし、代わりに[value*=1]jQuery のセレクター エンジンを使用ますvaluevalueマークアップに表示されないため、期待どおりの結果が得られます。[value*="1"]他のセレクター[value*=a]およびはすべて有効な CSS ですが、マークアップに属性[value*="a"]がないためコントロールと一致しないため、結果が得られません。value

実際の値で入力コントロールをクエリする必要がある場合は、何か他のもので識別できるかどうかを確認してください (Knockout.js は ID を与えますか?)。それ以外の場合は、DOM トラバーサルまたはフィルタリングを実行.val()し、正しい要素を取得するための値。セレクターは、要素のようvalueな動的属性ではなく、静的属性 (つまり、通常は値が変化しない属性) に基づくクエリにのみ使用する必要があります。input

.filter()と を使用した簡単な例.val():

$('.aa_ant').filter(function() { return $(this).val().indexOf('1') >= 0; });
于 2013-01-24T08:12:53.233 に答える
0

.length プロパティで何を達成しようとしていますか? .length は、ページ上で一致するセレクターの数を返します。

入力の値の長さを見つけようとしている場合は、次の手順を実行する必要があります。

alert($('.aa_ant[value*="1"]').val().length)

これがあなたの例です:http://jsfiddle.net/ptzVy/

入力の長さを取得する方法の例を次に示します。

http://jsfiddle.net/J52Yr/

于 2013-01-24T08:10:58.453 に答える