Gegeben ein beliebiges HTML-Element mit null oder mehr data-*
Wie kann man bei Attributen eine Liste von Schlüssel-Wert-Paaren für die Daten abrufen?
ZB gegeben:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Ich möchte dies programmgesteuert abrufen können:
{ "id":10, "cat":"toy", "cid":42 }
Mit jQuery (v1.4.3) ist der Zugriff auf die einzelnen Datenbits mit $.data()
einfach, wenn die Schlüssel im Voraus bekannt sind. Es ist jedoch nicht klar, wie dies mit beliebigen Datensätzen geschehen kann.
Ich suche nach einer 'einfachen' jQuery-Lösung, falls es eine gibt, hätte aber sonst nichts gegen einen Ansatz auf niedrigerer Ebene. Ich habe versucht zu analysieren, $('#prod').attributes
aber mein Mangel an Javascript-Fu lässt mich im Stich.
aktualisieren
customdata macht was ich brauche. Das Einfügen eines jQuery-Plugins für einen Bruchteil seiner Funktionalität schien jedoch ein Overkill zu sein.
Das Betrachten der Quelle half mir, meinen eigenen Code zu reparieren (und mein Javascript-Fu zu verbessern).
Hier ist die Lösung, die ich gefunden habe:
function getDataAttributes(node) {
var d = {},
re_dataAttr = /^data\-(.+)$/;
$.each(node.get(0).attributes, function(index, attr) {
if (re_dataAttr.test(attr.nodeName)) {
var key = attr.nodeName.match(re_dataAttr)[1];
d[key] = attr.nodeValue;
}
});
return d;
}
Update 2
Wie in der akzeptierten Antwort gezeigt, ist die Lösung mit jQuery trivial (> = 1.4.4). $('#prod').data()
würde das erforderliche Diktat zurückgeben.