Dado un elemento HTML arbitrario con cero o más data-*
atributos, ¿cómo se puede recuperar una lista de pares clave-valor para los datos?
Por ejemplo, dado esto:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Me gustaría poder recuperar esto programáticamente:
{ "id":10, "cat":"toy", "cid":42 }
Usando jQuery (v1.4.3), acceder a los bits de datos individuales usando $.data()
es simple si las claves se conocen de antemano, pero no es obvio cómo se puede hacer con conjuntos arbitrarios de datos.
Estoy buscando una solución 'simple' de jQuery si existe, pero de lo contrario no me importaría un enfoque de nivel inferior. Intenté analizar, $('#prod').attributes
pero mi falta de javascript-fu me decepciona.
actualizar
customdata hace lo que necesito. Sin embargo, incluir un complemento jQuery solo por una fracción de su funcionalidad parecía una exageración.
Observando la fuente me ayudó a arreglar mi propio código (y mejoró mi javascript-fu).
Aquí está la solución que se me ocurrió:
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;
}
actualización 2
Como se demostró en la respuesta aceptada, la solución es trivial con jQuery (> = 1.4.4). $('#prod').data()
devolvería la información requerida dict.