Dado um elemento HTML arbitrário com zero ou mais data-*
atributos, como recuperar uma lista de pares de valores-chave para os dados.
Por exemplo, dado o seguinte:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Eu gostaria de poder recuperar programaticamente isso:
{ "id":10, "cat":"toy", "cid":42 }
Usando o jQuery (v1.4.3), acessar os bits individuais de dados usando $.data()
é simples se as chaves forem conhecidas antecipadamente, mas não é óbvio como alguém pode fazer isso com conjuntos arbitrários de dados.
Estou procurando uma solução jQuery 'simples', se houver, mas não se importaria com uma abordagem de nível inferior. Eu tentei analisar, $('#prod').attributes
mas minha falta de javascript-fu está me decepcionando.
atualizar
customdata faz o que eu preciso. No entanto, incluir um plugin jQuery apenas por uma fração de sua funcionalidade parecia um exagero.
Observar a fonte me ajudou a corrigir meu próprio código (e melhorou meu javascript-fu).
Aqui está a solução que eu vim com:
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;
}
atualização 2
Como demonstrado na resposta aceita, a solução é trivial com o jQuery (> = 1.4.4). $('#prod').data()
retornaria o ditado de dados necessário.