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.
sumber
Jawaban:
Sebenarnya, jika Anda bekerja dengan jQuery, sesuai versi
1.4.31.4.4 (karena bug seperti yang disebutkan dalam komentar di bawah),data-*
atribut didukung melalui.data()
:The
jQuery.fn.data
fungsi akan mengembalikan semuadata-
atribut dalam sebuah obyek sebagai pasangan kunci-nilai, dengan kunci menjadi bagian dari nama atribut setelahdata-
dan nilai menjadi nilai atribut bahwa setelah makhluk dikonversi mengikuti aturan yang disebutkan di atas.Saya juga telah membuat demo sederhana jika itu tidak meyakinkan Anda: http://jsfiddle.net/yijiang/WVfSg/
sumber
!jQuery.isNaN( data ) ? parseFloat( data ) : ...
). Saya memiliki nomor seri produk di atribut saya sepertidata-serial="00071134"
jQuery yang menjadi nomor71134
, memaksa saya untuk kembali ke yang kurang elegan.attr('data-serial')
(bukan pilihan dalam kasus Anda). Saya telah melihat pertanyaan pada SO yang telah menyuarakan frustrasi yang sama.data()
, akan mencoba menggali satu ...$.data()
juga mengembalikan apa pun yang Anda simpan menggunakan$.data(key, value)
. Jika Anda benar-benar ingin memeriksa apakah ada sesuatu yang benar-benar disimpan di markup sebagai atribut data- *, metode ini mungkin bukan pilihan terbaik.Solusi JavaScript murni juga harus ditawarkan, karena solusinya tidak sulit:
Ini memberikan array objek atribut, yang memiliki
name
danvalue
properti:Sunting: Untuk melangkah lebih jauh, Anda bisa mendapatkan kamus dengan mengulangi atribut dan mengisi objek data:
Anda kemudian dapat mengakses nilai, misalnya,
data-my-value="2"
sebagaidata.myValue
;jsfiddle.net/3KFYf/33
Sunting: Jika Anda ingin mengatur atribut data pada elemen Anda secara terprogram dari suatu objek, Anda dapat:
jsfiddle.net/3KFYf/34
EDIT: Jika Anda menggunakan babel atau TypeScript, atau hanya coding untuk browser ES6, ini adalah tempat yang bagus untuk menggunakan fungsi panah ES6, dan mempersingkat kode:
sumber
-
karakter seperti jQuery tetapi jawaban yang diedit tidak.JSON.stringify()
memiliki format JSONel.getAttribute("data-foo")
. Saya telah memperbarui jawaban saya untuk menunjukkan bagaimana Anda dapat mengatur atribut data berdasarkan suatu objek.Lihat di sini :
Jika browser juga mendukung API JavaScript HTML5, Anda harus bisa mendapatkan data dengan:
atau
Oh, tapi saya juga membaca:
Mulai dari Mei 2010.
Jika Anda tetap menggunakan jQuery, Anda mungkin ingin melihat plugin customdata . Saya tidak punya pengalaman dengannya.
sumber
$("#my").customdata()
harus memberi Anda{method: "delete", remote: "true"}
... jadi itu harus bekerja.Seperti yang disebutkan di atas browser modern memiliki API HTMLElement.dataset .
API itu memberi Anda DOMStringMap , dan Anda dapat mengambil daftar
data-*
atribut yang hanya dilakukan:Anda juga dapat mengambil larik dengan
data-
nama kunci properti sepertiatau memetakan nilainya dengan
dan seperti ini Anda dapat mengulanginya dan menggunakannya tanpa perlu menyaring semua atribut elemen seperti yang perlu kita lakukan sebelumnya .
sumber
atau mengonversi
gilly3
jawaban yang sangat baik ke metode jQuery:Menggunakan
$('.foo').info()
:;sumber
Anda harus mendapatkan data melalui atribut dataset
dataset adalah alat yang berguna untuk mendapatkan atribut data
sumber
this.dataset
belum berfungsi di semua browser. Namun ada plugin jquery yang menyediakan fitur ini.Anda bisa mengulangi atribut data seperti objek lain untuk mendapatkan kunci dan nilai, berikut cara melakukannya
$.each
:sumber
Saya menggunakan masing - masing bersarang - bagi saya ini adalah solusi termudah (Mudah untuk mengontrol / mengubah "apa yang Anda lakukan dengan nilai-nilai - dalam contoh saya output data-atribut sebagai
ul-list
) (Kode Jquery)Codepen: https://codepen.io/ezra_siton/pen/GRgRwNw?editors=1111
sumber
Salah satu cara untuk menemukan semua atribut data adalah menggunakan
element.attributes
. Dengan menggunakan.attributes
, Anda dapat mengulangi semua atribut elemen, memfilter item yang termasuk string "data-".sumber