属性値に基づいてDOM内の要素を検索する


252

指定された属性名と属性値を持つ要素を検索するDOM APIがあるかどうか教えてください。

何かのようなもの:

doc.findElementByAttribute("myAttribute", "aValue");

1
あなたはjQueryのソルを探している場合は重複:stackoverflow.com/questions/696968/...
Rajat

13
受け入れられた回答を最新のソリューションであるWojtekの回答に更新していただけますか?
Nick Craver

回答:


165

更新:過去数年間で状況は劇的に変化しました。これで確実に使用することができますquerySelectorquerySelectorAll、ご覧Wojtekさんの答えこれを行う方法のために。

現在、jQueryの依存関係は必要ありません。jQueryを使用している場合、素晴らしい...使用していない場合は、属性による要素の選択だけに依存する必要はありません。


これをバニラJavaScriptで行うための非常に短い方法はありませんが、いくつかの解決策があります。

要素をループして属性を確認するこのようなことをします

jQueryのようなライブラリがオプションの場合は、次のように少し簡単にできます。

$("[myAttribute=value]")

値が有効なCSS識別子ではない(スペースや句読点が含まれているなど)場合は、値を引用符で囲む必要があります(単一または二重にすることができます)。

$("[myAttribute='my value']")

あなたも行うことができstart-withends-withcontains、等... 属性セレクタのためのいくつかのオプションがあります


6
実際、バニラJavaScript DOM APIは、最新のブラウザでかなりうまく機能しています
Wojtek Kruszewski

2
@WojtekKruszewskiは2010年ではありません:)私は更新しましたが、うまくいけば、質問者が私たちのために受け入れを移動します-現在の情報がそこにあります。
Nick Craver

1
特に何が必要かを知らなくても、jQuery(または同等のもの)がおそらく最も簡単にクロスブラウザー互換であると思います。
Alexis Wilke、2014

1
空の配列を取得し続けます!私はそれのd属性でSVGを取得しようとしていて、$( "[d = path]");を試行しています。ここで、「パス」は、必要な特定のd属性を含む変数です。誰かがこれをsvgパスでやってみましたか?
tx291

438

最新のブラウザーはネイティブをサポートしているquerySelectorAllため、次のことができます。

document.querySelectorAll('[data-foo="value"]');

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

ブラウザの互換性の詳細:

jQueryを使用して、廃止されたブラウザー(IE9以前)をサポートできます。

$('[data-foo="value"]');

2
「モダン」な定義を具体化するために:caniuse.com/#search=querySelectorAll
serhio

値を数値にすることはできないようですSyntaxError: An invalid or illegal string was specified
jeum 2015

3
セレクタは次のようになります'[data-foo="value"]'
Yotam Omerの

1
パフォーマンスに関するメモはありますか?これはすべてのノードで繰り返すより速いですか?
Stepan Yakovenko 2016

1
「data-foo」とは何ですか...この例では「myAttribute」はどこにありますか?
oo_dev

38

DOMで属性セレクターを使用するには、 document.querySelector()document.querySelectorAll()メソッドとメソッド。

あなたのために:

document.querySelector("selector[myAttribute='aValue']");

とを使用して querySlectorAll()

document.querySelectorAll("selector[myAttribute='aValue']");

querySelector()してquerySelectorAll()私たちは、「CSS」で選択した方法我々は、オブジェクトを選択することができます。

https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectorsの「CSS」属性セレクターの詳細


このdocument.querySelectorAll( "selector [myAttribute = aValue]");のような内側の引用符を削除する必要がありました。
Matjaz Hirsman

20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps正確な要素タイプがわかっている場合は、3番目のパラメーター(つまりdiv, a, p ...etc...)を追加します。

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

しかし、最初にこの関数を定義します:

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

コメントごとの推奨事項ごとに更新されたps。


6
なぜ ?!あなたはこれを行うことによって、すべてのDOMをループしている
アーサー

3
これは素晴らしいようです-ページに5つの要素しかない場合。
シェリフデレク2017

2
document.querySelectorAll('[data-foo="value"]');@Wojtek Kruszewskiが承認した日除けに関して提案したとおり。
アーサー

7

次に、src属性でドキュメント内の画像を検索する方法の例を示します。

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

クエリセレクタ、例を使用します。

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]nameプロパティを持つ要素を入力します。

[id|=view] 次で始まるIDを持つ要素 view-

[class~=button]buttonクラスを持つ要素。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.