Greifen Sie ohne jQuery auf das Attribut 'data-' zu

75

Kann ich ohne jQuery auf ein Datenattribut zugreifen?

Mit jQuery ist es einfach, aber ich kann nirgendwo sehen, wie es ohne jQuery geht.

Wenn ich bei Google "ohne jQuery" suche, erhalte ich nur jQuery-Beispiele.

Ist es überhaupt möglich?

user2143356
quelle
1
Das ist alt, aber es bringt dich zum Laufen: html5doctor.com/html5-custom-data-attributes
dsdsdsdsd

Antworten:

121

Auf hier fand ich dieses Beispiel:

<div id='strawberry-plant' data-fruit='12'></div>
<script>
    // 'Getting' data-attributes using getAttribute
    var plant = document.getElementById('strawberry-plant');
    var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'
    // 'Setting' data-attributes using setAttribute
    plant.setAttribute('data-fruit', '7'); // Pesky birds
</script>

Es scheint also sehr machbar.

Update: Da Microsoft jetzt (2020) die alte Internet Explorer-Engine zugunsten eines Chromium-basierten Edge datasetausläuft, funktioniert die Eigenschaft wahrscheinlich überall. Die Ausnahme werden zeitweise Organisationen und Unternehmensnetzwerke sein, in denen der IE immer noch gezwungen ist. Zum Zeitpunkt des Schreibens zeigt jsPerf jedoch immer noch, dass die Methode get / setAttribute zumindest unter Chrome 81 schneller ist als die Verwendung von Datasets.

fredrik
quelle
Dies scheint der richtige Ansatz zu sein. Außerdem müssen Sie wahrscheinlich in der Lage sein, Folgendes zu tun: document.getElementById ('Erdbeerpflanze'). SetAttribute ('Datenfrucht', 'Einige Daten hier');
sage88
2
Bitte lesen Sie die Antwort von morgen in Bezug auf den Datensatz - es ist die richtige Antwort, es sei denn, Sie müssen veraltete Webbrowser (IE) unterstützen, was für Sie wirklich bedauerlich ist, wenn dies der Fall ist ... Alle modernen Browserversionen unterstützen HTML5 und ECMAScript 5 (sicher ) und 6 fast vollständig an dieser Stelle.
Carnix
Scheint besser lesbar als Datensatz. Die meisten Entwickler würden wissen, was diese Codezeile auf den ersten
Blick bewirkt, sind sich
38

Sie können das Dataset- Attribut verwenden. Wie in:

element = document.getElementById("el");
alert(element.dataset.name); // element.dataset.name == data-name
morgen
quelle
3
Hinweis: Dies ist zwar vollständig korrekt, funktioniert jedoch nur in HTML5-kompatiblen Browsern. Die Verwendung der getAttributeMethode funktioniert in den meisten Browsern.
Fredrik
3
Dies ist zwar nicht unbedingt abwärtskompatibel mit veralteten Browsern (z. B. allen IE-Versionen), aber die richtige Antwort. Zu dieser Zeit (2013) war es sicherlich vorausschauend, aber jetzt, 5 Jahre später, sollte dies so gemacht werden.
Carnix
-1

Ich denke, Sie können dies versuchen:

var ele = document.getElementById("myelement");
if (ele.hasOwnProperty("data")) {
  alert(ele.data);
}

ODER verwenden

alert(ele['data-property']);
asim-ishaq
quelle
1
Aus den MDN-Dokumenten geht hervor, dass die Methode getAttribute ideal ist, da sie schneller ist. Ich zitiere unten: ** Außerdem ist die Leistung beim Lesen von Datenattributen im Vergleich zum Speichern dieser Daten in einem JS-Data-Warehouse schlecht. Die Verwendung eines Datensatzes ist sogar langsamer als das Auslesen der Daten mit getAttribute (). ** - link
razzbee