Biorąc pod uwagę dowolny element HTML z zerową lub większą liczbą data-*
atrybutów, w jaki sposób można pobrać listę par klucz-wartość dla danych.
Np. Mając to:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Chciałbym móc programowo pobrać to:
{ "id":10, "cat":"toy", "cid":42 }
Korzystając z jQuery (v1.4.3), dostęp do poszczególnych bitów danych za pomocą $.data()
jest prosty, jeśli klucze są znane z góry, ale nie jest oczywiste, jak można to zrobić z dowolnymi zestawami danych.
Szukam „prostego” rozwiązania jQuery, jeśli takie istnieje, ale w przeciwnym razie nie miałbym nic przeciwko podejściu na niższym poziomie. Próbowałem parsować, $('#prod').attributes
ale mój brak javascript-fu zawodzi.
aktualizacja
customdata robi to, czego potrzebuję. Jednak włączenie wtyczki jQuery tylko dla ułamka jej funkcjonalności wydawało się przesadą.
Przeszukanie źródła pomogło mi naprawić mój własny kod (i ulepszyłem mój javascript-fu).
Oto rozwiązanie, które wymyśliłem:
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;
}
aktualizacja 2
Jak wykazano w przyjętej odpowiedzi, rozwiązanie jest trywialne z jQuery (> = 1.4.4). $('#prod').data()
zwróci wymagane dane.