web-dev-qa-db-ja.com

属性による要素の選択

生成されたIDを持つチェックボックスのコレクションがあり、それらのいくつかには追加の属性があります。要素に特定の属性があるかどうかを確認するためにJQueryを使用することは可能ですか?たとえば、次の要素に属性 "myattr"があるかどうかを確認できますか?属性の値はさまざまです。

<input type="checkbox" id="A" myattr="val_attr">A</input>

たとえば、1つずつチェックせずに、この属性を持つすべてのチェックボックスのコレクションを取得する方法はありますか。これは可能ですか?

247
Ciprian Grosu

あなたはそれらを選択できるという意味ですか?もしそうなら、はい:

$(":checkbox[myattr]")
188
cletus
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
}
364
Stefan Gehrig

質問がされてから長い時間が経ったことを私は知っています、しかし私はこのようにチェックがより明確であることがわかりました:

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(このサイトで見つけられるように こちら

に関するドキュメントはです ここ

166

JavaScriptでは、...

null == undefined

...はtrue *を返します。 =====の違いです。また、undefinedという名前を定義することができます(これはnullのようなキーワードではありません)ので、他の方法で確認することをお勧めします。最も信頼できる方法はおそらくtypeof演算子の戻り値を比較することです。

typeof o == "undefined"

それでも、この場合はnullと比較してもうまくいくはずです。

* undefinedが実際には未定義であると仮定します。

8
bambams

これは動作します:

$('#A')[0].hasAttribute('myattr');
8
powermikee

$("input[attr]").lengthはより良い選択肢かもしれません。

5
ssps

「typeof」、「jQuery」、「。is」、および「。filter」を使用していくつかのアイデアがまとめられたので、それらの簡単な比較を投稿すると思いました。 typeofがこれに最も適しています。他の人はうまくいくでしょうが、この取り組みのためにjqライブラリを呼び出すときには明らかなパフォーマンスの違いがあるようです。

4
Daved
$("input#A").attr("myattr") == null
1
Mathias F
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}
1
Fury

単に:

$('input[name*="value"]')

詳細情報: 公式ドキュメント

1
Kambiz

.isと属性セレクタ[]を使って、 この記事 のように、関数(またはプロトタイプ)を簡単に追加できます。

function hasAttr($sel,attr) {
    return $sel.is('['+attr+']');
}
1
dhc

問題の上記のように意図した動作でnpmパッケージを作成しました。

[npm] および [github] へのリンク

使い方はとても簡単です。例えば:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

trueを返します。

キャメルケースでも動作します。

0
Shoter

属性$('[someAttribute]')または$('input[someAttribute]')を持つすべての要素を選択することに加えて、クリックハンドラのようにオブジェクトに対してブールチェックをするための関数を使うこともできます。

if(! this.hasAttribute('myattr') ) { ...

0
AaronLS