1

http://jsfiddle.net/CuURK/

次のようなラジオボタンがいくつかあります。

<input type='radio' name='myradio' id='myradio' />

マークアップで value 属性のないすべてのラジオ ボタンを選択し、これらの属性を設定する必要があります。次のテストは機能しません。

$('#myradio').val() // returns 'on'
$('#myradio').attr('value') // returns 'on'

これは Chrome では機能するようですが、IE8 では機能しません。

$('#myradio').is('[value]'); //doesn't work in IE8

要素に値属性があるかどうかを判断する最も安全な方法は何ですか? 上記の動作の説明はありますか?

4

3 に答える 3

2

最良かつ最速の方法は、CSSセレクターに固執することです。

$('input[type="radio"]:not([value])')

属性が存在しないinputすべての要素を返します—このフィドルを参照してくださいradio value

コレクションを返すので、不足している属性の追加、クラスの追加、要素の非表示または削除など、.each()ループを必要とせずに好きなことを行うことができます。これは、jQueryのほとんどのメソッドがコレクションで機能するためです—このフィドルを参照してください

したがって、不足している属性を追加する場合は、次のようにします。

$('input[type="radio"]:not([value])').attr('value', 'foobar');

セレクターは有効なCSS3セレクターであることに注意してください。


アップデート:

これによると[attr]、指定された属性が空の場合、IE8はを使用して一致できないため、セレクターはIE8で一致しません(そしてそれを一致させようとしています)。

したがって、sをループしてinput、属性valueがに等しいかどうかを確認する必要があります。これは''、jQueryが欠落している場合は、空の文字列を返すためです。

これがフィドルです。IE8で動作します(実際のIE8で試すことができました)。

$('input[type="radio"]').each(function (index, element) {
    var $this = $(this);
    if ($this.get(0).outerHTML.indexOf('value') === -1) {
        $this.addClass('found');
    }
});

要素ごとに、そのouterHTMLプロパティにvalue文字列が含まれているかどうかを確認します。文字列が含まれていない場合は、それが見つかりました。ご覧のとおり、次のようなノードでのみ失敗します。

<input type="radio" value />

IEはそれを次のように解析するためです。

<input type="radio" />

これは効率的なソリューションではありませんが、機能します。

ちなみに、コメントで言ったように、属性inputはwithtype="radio"必要valueです。そうでない場合、ドキュメントは無効であり、ブラウザはドキュメントツリーを修正しようとする可能性があります。Firefoxはデフォルト値のを追加するように見えますがon、Safariは追加しません。

最後に、検索された属性が存在しない場合、jQuery.attr()は戻ります(ソースを参照)。したがって、通常、次のことを確認できます。undefined

typeof $('#foo').attr('attributeName') === 'undefined'

要素にattributeName属性があるかどうかを確認します。

于 2012-07-11T07:38:05.727 に答える
1

以下が機能します。

$('input[type="radio"]:not([value])')

ここに示すように: http://jsfiddle.net/4sLzc/1/

"on"を返す理由.val()は、value 属性のないラジオ ボタンが "on" を返すのが既定の動作であるためです。これは jQuery のことではありません。プレーンな JavaScript でも同じことが起こります。つまりdocument.getElementById("myradio").value、フォームが送信されると、サーバー側で "on" が実際に送信された値であることがわかります。

于 2012-07-11T07:40:35.353 に答える
0

これは、value 属性を持つ要素に一致します。

$('input[value]');

そして、これはそうでないもののために

$('!input[value]');
于 2012-07-11T07:11:51.257 に答える