Diberikan elemen HTML sewenang-wenang dengan nol atau lebih data-*
atribut, bagaimana seseorang dapat mengambil daftar pasangan nilai kunci untuk data.
Misalnya diberikan ini:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Saya ingin dapat mengambil program ini secara terprogram:
{ "id":10, "cat":"toy", "cid":42 }
Menggunakan jQuery (v1.4.3), mengakses bit data individual menggunakan $.data()
sederhana jika kunci diketahui sebelumnya, tetapi tidak jelas bagaimana seseorang dapat melakukannya dengan set data yang sewenang-wenang.
Saya mencari solusi jQuery 'sederhana' jika ada, tetapi tidak akan keberatan dengan pendekatan level yang lebih rendah. Saya mencoba mengurai $('#prod').attributes
tetapi kekurangan javascript-fu membuat saya kecewa.
memperbarui
customdata melakukan apa yang saya butuhkan. Namun, termasuk plugin jQuery hanya untuk sebagian kecil dari fungsinya tampak seperti berlebihan.
Memata-matai sumber membantu saya memperbaiki kode saya sendiri (dan meningkatkan javascript-fu saya).
Inilah solusi yang saya buat:
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;
}
pembaruan 2
Seperti ditunjukkan dalam jawaban yang diterima, solusinya sepele dengan jQuery (> = 1.4.4). $('#prod').data()
akan mengembalikan dict data yang diperlukan.