Apa perbedaan penggunaan antara $.data
dan $.attr
saat menggunakan data-someAttribute
?
Pemahaman saya adalah yang $.data
disimpan dalam jQuery $.cache
, bukan DOM. Karena itu, jika saya ingin menggunakan $.cache
untuk penyimpanan data, saya harus menggunakannya $.data
. Jika saya ingin menambahkan atribut data HTML5, saya harus menggunakan $.attr("data-attribute", "myCoolValue")
.
attr()
dapat menyebabkan kebocoran memori (setidaknya di IE), saat menggunakandata()
aman. Dia mengisyaratkan hal ini dalam jawabannya meskipun dia tidak secara eksplisit keluar dan mengatakannya. Info lebih lanjut tentang dokumen jQuery (lihat "Catatan Tambahan"): api.jquery.com/attrdata-someAttribute
tidak valid; per spek, hanya huruf kecil yang diizinkan. Anda akan menemui banyak sekali masalah aneh dengan menggunakan karakter huruf besar.Jawaban:
Jika Anda meneruskan data ke elemen DOM dari server, Anda harus mengatur data pada elemen:
Data kemudian dapat diakses menggunakan
.data()
di jQuery:Namun ketika Anda menyimpan data pada simpul DOM di jQuery menggunakan data, variabel disimpan pada objek simpul . Ini untuk mengakomodasi objek dan referensi yang kompleks karena menyimpan data pada elemen node sebagai atribut hanya akan mengakomodasi nilai string.
Melanjutkan contoh saya dari atas:Juga, konvensi penamaan untuk atribut data memiliki sedikit "gotcha" tersembunyi:
HTML: JS:Kunci yang ditulis dgn tanda penghubung masih akan bekerja:
HTML: JS:Namun objek yang dikembalikan oleh
.data()
tidak akan memiliki set kunci ditulis dgn tanda penghubung:Karena alasan inilah saya menyarankan untuk menghindari kunci ditulis dgn tanda penghubung dalam javascript.
Untuk HTML, tetap gunakan formulir ditulis dgn tanda penghubung. Atribut HTML seharusnya mendapatkan ASCII-lowercased otomatis , sehingga
<div data-foobar></div>
,<DIV DATA-FOOBAR></DIV>
, dan<dIv DaTa-FoObAr></DiV>
yang seharusnya diperlakukan sebagai identik, tetapi untuk kompatibilitas terbaik bentuk kasus yang lebih rendah harus lebih disukai.The
HTML: JS:.data()
Metode juga akan melakukan beberapa dasar auto-casting jika nilai cocok dengan pola diakui:Kemampuan auto-casting ini sangat nyaman untuk instantiating widget & plugin:
Jika Anda benar-benar harus memiliki nilai asli sebagai string, maka Anda harus menggunakan
HTML: JS:.attr()
:Ini adalah contoh yang dibuat-buat. Untuk menyimpan nilai warna, saya dulu menggunakan notasi hex numerik (yaitu 0xABC123), tetapi perlu dicatat bahwa hex diurai secara salah dalam versi jQuery sebelum 1.7.2 , dan tidak lagi diurai menjadi
Number
seperti pada jQuery 1.8 rc 1.jQuery 1.8 rc 1 mengubah perilaku auto-casting . Sebelum, format itu adalah representasi yang sah dari
HTML: JS:Number
akan dilemparkan keNumber
. Sekarang, nilai-nilai yang numerik hanya auto-cast jika representasi mereka tetap sama. Ini paling baik digambarkan dengan sebuah contoh.Jika Anda berencana untuk menggunakan sintaks numerik alternatif untuk mengakses nilai numerik, pastikan untuk memberikan nilainya ke yang
JS (lanjutan):Number
pertama, seperti dengan+
operator unary .sumber
.data()
akan memiliki set bentuk ditulis dgn tanda penghubung, sehingga akan bekerja, tetapi tidak akan. Karena alasan inilah saya menyarankan agar orang-orang menghindari menggunakan bentuk ditulis dgn tanda penghubung.$('#bar').data('foo-bar-baz')
$('#bar').data()['foo-bar-baz']
Perbedaan utama antara keduanya adalah di mana ia disimpan dan bagaimana diakses.
$.fn.attr
menyimpan informasi secara langsung pada elemen dalam atribut yang dapat dilihat publik setelah inspeksi, dan juga yang tersedia dari API asli elemen tersebut.$.fn.data
menyimpan informasi di tempat yang sangat tidak jelas . Ini terletak di variabel lokal tertutupdata_user
yang disebut yang merupakan turunan dari data fungsi yang didefinisikan secara lokal. Variabel ini tidak dapat diakses dari luar jQuery secara langsung.Kumpulan data dengan
attr()
$(element).attr('data-name')
element.getAttribute('data-name')
,data-name
juga dapat diakses dari$(element).data(name)
danelement.dataset['name']
danelement.dataset.name
Kumpulan data dengan
.data()
.data(name)
.attr()
atau di mana punsumber
.attr()
merupakan cara untuk pergi, jika setelah itu Anda ingin menggunakan data sebagai pemilih (.data()
tidak akan ditemukan; lihat codepen.io/anon/pen/EvawPV?editors=1011 )Anda dapat menggunakan
data-*
atribut untuk menanamkan data khusus. Thedata-*
atribut memberi kita kemampuan untuk data kustom embed atribut pada semua elemen HTML..data()
Metode jQuery memungkinkan Anda untuk mendapatkan / menyetel data jenis apa pun ke elemen DOM dengan cara yang aman dari referensi melingkar dan karenanya dari kebocoran memori..attr()
Metode jQuery mendapatkan / menetapkan nilai atribut hanya untuk elemen pertama di set yang cocok.Contoh:
sumber