生成されたIDを持つチェックボックスのコレクションがあり、それらのいくつかには追加の属性があります。要素に特定の属性があるかどうかを確認するためにJQueryを使用することは可能ですか?たとえば、次の要素に属性 "myattr"があるかどうかを確認できますか?属性の値はさまざまです。
<input type="checkbox" id="A" myattr="val_attr">A</input>
たとえば、1つずつチェックせずに、この属性を持つすべてのチェックボックスのコレクションを取得する方法はありますか。これは可能ですか?
あなたはそれらを選択できるという意味ですか?もしそうなら、はい:
$(":checkbox[myattr]")
if ($('#A').attr('myattr')) {
// attribute exists
} else {
// attribute does not exist
}
編集:
else
が存在するが空の文字列または "0"の場合、上記はmyattr
-ブランチに分類されます。それが問題であればundefined
を明示的にテストするべきです:
if ($('#A').attr('myattr') !== undefined) {
// attribute exists
} else {
// attribute does not exist
}
JavaScriptでは、...
null == undefined
...はtrue
*を返します。 ==
と===
の違いです。また、undefined
という名前を定義することができます(これはnull
のようなキーワードではありません)ので、他の方法で確認することをお勧めします。最も信頼できる方法はおそらくtypeof
演算子の戻り値を比較することです。
typeof o == "undefined"
それでも、この場合はnullと比較してもうまくいくはずです。
* undefined
が実際には未定義であると仮定します。
これは動作します:
$('#A')[0].hasAttribute('myattr');
$("input[attr]").length
はより良い選択肢かもしれません。
「typeof」、「jQuery」、「。is」、および「。filter」を使用していくつかのアイデアがまとめられたので、それらの簡単な比較を投稿すると思いました。 typeofがこれに最も適しています。他の人はうまくいくでしょうが、この取り組みのためにjqライブラリを呼び出すときには明らかなパフォーマンスの違いがあるようです。
$("input#A").attr("myattr") == null
if (!$("#element").attr('my_attr')){
//return false
//attribute doesn't exists
}
.is
と属性セレクタ[]
を使って、 この記事 のように、関数(またはプロトタイプ)を簡単に追加できます。
function hasAttr($sel,attr) {
return $sel.is('['+attr+']');
}
属性$('[someAttribute]')
または$('input[someAttribute]')
を持つすべての要素を選択することに加えて、クリックハンドラのようにオブジェクトに対してブールチェックをするための関数を使うこともできます。
if(! this.hasAttribute('myattr') ) { ...