Étant donné un élément HTML arbitraire avec zéro ou plusieurs data-*
attributs, comment récupérer une liste de paires clé-valeur pour les données.
Par exemple, étant donné ceci:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
J'aimerais pouvoir récupérer par programme ceci:
{ "id":10, "cat":"toy", "cid":42 }
En utilisant jQuery (v1.4.3), accéder aux bits de données individuels en utilisant $.data()
est simple si les clés sont connues à l'avance, mais il n'est pas évident de savoir comment le faire avec des ensembles de données arbitraires.
Je recherche une solution jQuery «simple» s'il en existe une, mais cela ne me dérangerait pas une approche de niveau inférieur autrement. J'ai essayé d'analyser $('#prod').attributes
mais mon manque de javascript-fu me laisse tomber.
mettre à jour
customdata fait ce dont j'ai besoin. Cependant, inclure un plugin jQuery juste pour une fraction de ses fonctionnalités semblait être une exagération.
Regarder la source m'a aidé à corriger mon propre code (et a amélioré mon javascript-fu).
Voici la solution que j'ai trouvée:
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;
}
mise à jour 2
Comme démontré dans la réponse acceptée, la solution est triviale avec jQuery (> = 1.4.4). $('#prod').data()
renverrait les données requises dict.