Gibt es eine einfache und unkomplizierte Methode, um Elemente anhand ihres data
Attributs auszuwählen ? Wählen Sie beispielsweise alle Anker aus, customerID
deren Datenattribut den Wert hat 22
.
Ich zögere etwas, rel
andere Attribute zum Speichern solcher Informationen zu verwenden, aber ich finde es viel schwieriger, ein Element basierend auf den darin gespeicherten Daten auszuwählen.
jquery
html
custom-data-attribute
Hazem Salama
quelle
quelle
$('*[data-customerID]')
Sie können es zB verwenden$('*[data-customerID]').each( function() { ... });
Antworten:
Sie sollten in der Lage sein, das wegzulassen
*
, aber wenn ich mich richtig erinnere, kann dies je nach verwendeter jQuery-Version zu fehlerhaften Ergebnissen führen.Beachten Sie, dass aus Gründen der Kompatibilität mit der Selectors-API (
document.querySelector{,all}
) die Anführungszeichen um den Attributwert (22
) in diesem Fall nicht weggelassen werden dürfen .Wenn Sie in Ihren jQuery-Skripten häufig mit Datenattributen arbeiten, sollten Sie das Plugin für benutzerdefinierte HTML5-Datenattribute verwenden . Auf diese Weise können Sie mithilfe von noch besser lesbaren Code schreiben
.dataAttr('foo')
und nach der Minimierung eine kleinere Dateigröße erzielen (im Vergleich zur Verwendung.attr('data-foo')
).quelle
.data()
benutzerdefiniertedata-*
Attribute zugeordnet, wodurch dieses Plugin überflüssig wird. Es kann jedoch weiterhin für ältere Versionen von jQuery verwendet werden. “$('[data-customerID]')
.data()
) festgelegt wurde, oder?Für Leute, die googeln und allgemeinere Regeln für die Auswahl mit Datenattributen wünschen:
$("[data-test]")
wird jedes Element auswählen , das lediglich hat das Datenattribut (nicht den Wert des Attributs Rolle). Einschließlich:$('[data-test~="foo"]')
wählt jedes Element aus, in dem das Datenattribut enthalten istfoo
, das jedoch nicht genau sein muss, z.$('[data-test="the_exact_value"]')
wählt jedes Element aus, bei dem der genaue Wert des Datenattributs lautetthe_exact_value
, zum Beispiel:aber nicht
quelle
~=
Wörter mit Leerzeichen getrennt sind, während sie*=
mit beliebigen Teilzeichenfolgen übereinstimmen.^
Charakter?$('[data-test^=foo]')
wählen Sie in diesem Fall alles, was mit foo beginnt, wie<div data-test="foo_exact_value">
oder<div data-test="food">
aber nicht<div data-test="seafoo">
Wenn Sie verwenden,
$('[data-whatever="myvalue"]')
wird alles mit HTML-Attributen ausgewählt. In neueren jQueries scheint es jedoch so zu sein, dass$(...).data(...)
beim Anhängen von Daten ein magisches Browser-Ding verwendet wird, das sich nicht auf das HTML auswirkt. Daher wird es nicht.find
wie in der vorherigen Antwort angegeben erkannt .Überprüfen Sie (getestet mit 1.7.2+) (siehe auch Geige ): (aktualisiert, um vollständiger zu sein)
quelle
.filter
hier$item.attr('data-id', 10);
Ich habe keine JavaScript-Antwort ohne jQuery gesehen. Hoffentlich hilft es jemandem.
Die Info:
Datenattribute
.querySelectorAll ();
quelle
Um alle Anker mit dem Datenattribut auszuwählen
data-customerID==22
, sollten Sie das einschließena
, um den Umfang der Suche auf nur diesen Elementtyp zu beschränken. Das Durchführen von Datenattributsuchen in einer großen Schleife oder mit hoher Häufigkeit, wenn sich viele Elemente auf der Seite befinden, kann zu Leistungsproblemen führen.quelle
Native JS-Beispiele
Holen Sie sich die NodeList der Elemente
html:
<div data-id="container"></div>
Holen Sie sich das erste Element
html:
<div id="container"></div>
Ziel ist eine Sammlung von Knoten, die eine Knotenliste zurückgibt
html:
Ruft Elemente ab, die auf mehreren (ODER) Datenwerten basieren
html:
Holen Sie sich Elemente basierend auf kombinierten (UND) Datenwerten
html:
Holen Sie sich Elemente, bei denen der Wert beginnt
quelle
über die Methode Jquery filter ():
http://jsfiddle.net/9n4e1agn/1/
HTML:
JavaScript:
quelle
Die Konstruktion sieht folgendermaßen aus:
$('[data-XXX=111]')
Funktioniert in Safari 8.0 nicht .Wenn Sie das Datenattribut folgendermaßen festlegen :
$('div').data('XXX', 111)
, funktioniert dies nur, wenn Sie das Datenattribut direkt im DOM wie folgt festlegen :$('div').attr('data-XXX', 111)
.Ich denke, das liegt daran, dass das jQuery-Team den Garbage Collector optimiert hat, um Speicherlecks und schwere Vorgänge bei der DOM-Neuerstellung für jedes Änderungsdatenattribut zu verhindern.
quelle
Damit dies in Chrome funktioniert, darf der Wert kein weiteres Anführungszeichen enthalten.
Es funktioniert zum Beispiel nur so:
quelle
$('[data-action=setStatus]').removeClass('disabled')
Manchmal ist es wünschenswert, Elemente danach zu filtern, ob ihnen programmgesteuert Datenelemente zugeordnet sind (auch bekannt als nicht über Dom-Attribute):
Das obige funktioniert aber ist nicht sehr lesbar. Ein besserer Ansatz ist die Verwendung eines Pseudo-Selektors zum Testen dieser Art von Dingen:
Jetzt können wir die ursprüngliche Aussage in etwas fließenderes und lesbareres umgestalten:
quelle
Nur um alle Antworten mit einigen Funktionen des 'Lebensstandards' zu vervollständigen - Inzwischen (in der HTML5-Ära) ist es möglich, dies ohne Bibliotheken von Drittanbietern zu tun:
document.querySelector('[data-answer="42"],[type="submit"]')
document.querySelectorAll('[data-answer="42"],[type="submit"]')
[data-answer="42"],[type="submit"]
[data-answer]
oderinput[type]
quelle