Dato un elemento HTML arbitrario con zero o più data-*
attributi, come si può recuperare un elenco di coppie chiave-valore per i dati.
Ad esempio dato questo:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Vorrei essere in grado di recuperare a livello di codice questo:
{ "id":10, "cat":"toy", "cid":42 }
Usando jQuery (v1.4.3), accedere ai singoli bit di dati usando $.data()
è semplice se le chiavi sono conosciute in anticipo, ma non è ovvio come si possa farlo con insiemi di dati arbitrari.
Sto cercando una soluzione jQuery 'semplice' se ne esiste una, ma altrimenti non dispiacerebbe un approccio di livello inferiore. Ho provato a analizzare $('#prod').attributes
ma la mia mancanza di javascript-fu mi sta deludendo.
aggiornare
customdata fa quello che mi serve. Tuttavia, includere un plug-in jQuery solo per una frazione della sua funzionalità sembrava un eccesso.
Il bulbo oculare della fonte mi ha aiutato a correggere il mio codice (e ha migliorato il mio javascript-fu).
Ecco la soluzione che mi è venuta in mente:
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;
}
aggiornamento 2
Come dimostrato nella risposta accettata, la soluzione è banale con jQuery (> = 1.4.4). $('#prod').data()
restituirebbe il dict di dati richiesto.