Suchen Sie ein Element in DOM basierend auf einem Attributwert

252

Können Sie mir bitte sagen, ob es eine DOM-API gibt, die nach einem Element mit einem bestimmten Attributnamen und Attributwert sucht:

Etwas wie:

doc.findElementByAttribute("myAttribute", "aValue");
Michael
quelle
1
Duplizieren Sie, wenn Sie nach einem Jquery Sol suchen: stackoverflow.com/questions/696968/…
Rajat
13
Können Sie bitte die akzeptierte Antwort auf die moderne Lösung, Wojteks Antwort, aktualisieren?
Nick Craver

Antworten:

165

Update: In den letzten Jahren hat sich die Landschaft drastisch verändert. Sie können jetzt zuverlässig verwenden querySelectorund querySelectorAll, siehe Wojteks Antwort, wie dies zu tun ist.

Es ist jetzt keine jQuery-Abhängigkeit erforderlich. Wenn Sie jQuery verwenden, großartig ... wenn Sie es nicht sind, müssen Sie sich nicht mehr nur darauf verlassen, Elemente nach Attributen auszuwählen.


Es gibt keine sehr kurze Möglichkeit, dies in Vanille-Javascript zu tun, aber es gibt einige Lösungen.

Sie tun so etwas, indem Sie Elemente durchlaufen und das Attribut überprüfen

Wenn eine Bibliothek wie jQuery eine Option ist, können Sie dies etwas einfacher tun:

$("[myAttribute=value]")

Wenn der Wert kein gültiger CSS-Bezeichner ist (er enthält Leerzeichen oder Satzzeichen usw.), benötigen Sie Anführungszeichen um den Wert (sie können einfach oder doppelt sein):

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

Sie können auch tun start-with, ends-with, contains, etc ... gibt es mehrere Optionen für das Attribut Selektor .

Nick Craver
quelle
6
Eigentlich funktioniert Vanilla JavaScript DOM API ziemlich gut in modernen Browsern
Wojtek Kruszewski
2
@WojtekKruszewski nicht im Jahr 2010 :) Ich habe jedoch ein Update durchgeführt, hoffentlich wird der Fragesteller die Annahme für uns verschieben - wir möchten aktuelle Informationen da draußen.
Nick Craver
1
Ich denke, jQuery (oder ein gleichwertiges Programm) ist wahrscheinlich am einfachsten, insbesondere um browserübergreifend kompatibel zu sein, ohne wissen zu müssen, was dies erfordert.
Alexis Wilke
1
Ich bekomme immer ein leeres Array! Ich versuche, eine SVG anhand ihres d-Attributs zu erfassen, und versuche $ ("[d = Pfad]"). Dabei ist 'Pfad' eine Variable, die das spezifische d-Attribut enthält, das ich benötige. Hat jemand versucht, dies mit SVG-Pfaden zu tun?
tx291
438

Moderne Browser unterstützen native, querySelectorAllsodass Sie Folgendes tun können:

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

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

Details zur Browserkompatibilität:

Sie können jQuery verwenden, um veraltete Browser (IE9 und älter) zu unterstützen:

$('[data-foo="value"]');
Wojtek Kruszewski
quelle
2
Um die "moderne" Definition zu konkretisieren: caniuse.com/#search=querySelectorAll
serhio
Es scheint, dass Wert keine Zahl oderSyntaxError: An invalid or illegal string was specified
jeum
3
Der Selektor sollte sein:'[data-foo="value"]'
Yotam Omer
1
Irgendwelche Anmerkungen zur Leistung? Ist dies schneller als das Iterieren über alle Knoten?
Stepan Yakovenko
1
Was ist "data-foo" ... und wo ist "myAttribute" in diesem Beispiel geblieben?
oo_dev
38

Wir können die Attributauswahl in DOM mithilfe von document.querySelector()und document.querySelectorAll()Methoden verwenden.

für deine:

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

und mit querySlectorAll():

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

In querySelector()und querySelectorAll()Methoden können wir Objekte auswählen, wie wir sie in "CSS" auswählen.

Weitere Informationen zu "CSS" -Attributselektoren finden Sie unter https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors

Naveen Pantra
quelle
Ich musste innere Anführungszeichen wie dieses document.querySelectorAll ("selector [myAttribute = aValue]") entfernen.
Matjaz Hirsman
20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps Wenn Sie den genauen Elementtyp kennen, fügen Sie den 3. Parameter hinzu (dh div, a, p ...etc...):

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

Definieren Sie zunächst diese Funktion:

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 aktualisiert pro Kommentar Empfehlungen.

T.Todua
quelle
6
Warum ?! Sie schleifen alle Ihre DOM auf diese Weise
Arthur
3
Dies scheint großartig zu sein - wenn Sie nur 5 Elemente auf der Seite haben.
Sheriffderek
2
document.querySelectorAll('[data-foo="value"]');wie von @Wojtek Kruszewski auf akzeptierten Markisen vorgeschlagen.
Arthur
7

Hier ist ein Beispiel: So suchen Sie Bilder in einem Dokument nach dem src-Attribut:

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

Verwenden Sie Abfrageselektoren, Beispiele:

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

input[name]Gibt Elemente mit nameEigenschaft ein.

[id|=view]Elemente mit ID, die mit beginnen view-.

[class~=button]Elemente mit der buttonKlasse.

Daniel De León
quelle