Kadang kita perlu menyimpan informasi kecil yang menempel pada elemen: harga satu item menu, kode produk, atau status satu baris daftar. HTML tidak menyediakan atribut bawaan untuk setiap kebutuhan seperti itu — tetapi menyediakan mekanisme umum: atribut berprefiks data- yang namanya kita pilih sendiri.
Atribut data-* termasuk global attributes: sah dipakai pada elemen apa pun. Browser tidak memakai nilainya untuk apa pun — data tersebut murni tersimpan untuk dibaca skrip yang kita tulis.
Bentuk Penulisan #
Pola dasarnya: prefiks data- diikuti nama pilihan kita, lalu nilai berupa teks dalam tanda kutip. Nama sebaiknya kebab-case (huruf kecil dipisah tanda hubung) supaya seragam dan mudah diketik; nilainya bebas — angka, kode, atau teks pendek.
<li data-harga="15000">Kopi susu</li>Mari kita telaah baris di atas:
- Baris 1 (
data-harga="15000"): atribut kustom bernamahargamenempel pada butir daftar. - Baris 1 (nilai
"15000"): nilai selalu berupa teks (string), meskipun isinya tampak seperti angka.
Membaca Lewat dataset #
JavaScript membaca data attributes lewat properti dataset pada elemen: prefiks data- dibuang, dan tanda hubung pada nama diubah menjadi huruf besar (camelCase). Contoh data-harga menjadi dataset.harga.
<ul>
<li data-harga="15000" data-kode="KS-01">Kopi susu</li>
<li data-harga="12000" data-kode="TM-01">Teh melati</li>
</ul>
<script>
const item = document.querySelector("li");
console.log(item.dataset.harga, item.dataset.kode);
</script>Mari kita telaah kode di atas:
- Baris 2-3 (
data-hargadandata-kode): dua data kustom menempel pada elemen yang sama — tidak ada batasan jumlah. - Baris 6 (
querySelector("li")): mengambil elemenlipertama dari dokumen. - Baris 7 (
item.dataset.hargadanitem.dataset.kode): membacadata-hargadandata-kode; tanda hubung pada nama yang lebih panjang menjadi huruf besar —data-harga-promodibaca sebagaidataset.hargaPromo.
Saat halaman dibuka, console DevTools menampilkan 15000 dan KS-01. Kedua nilai tersebut bertipe string, jadi perhitungan angka memerlukan pengubahan tipe terlebih dahulu.
Nilai data-* tidak pernah tampil di halaman — tetapi skrip bisa membacanya kapan pun. Tekan salah satu tombol berikut, lalu lihat hasil pembacaan dataset-nya:
Skrip kecil di dalam demo membaca tiga atribut sekaligus saat tombol ditekan. Perhatikan konversi namanya: atribut data-nama-menu terbaca sebagai dataset.namaMenu — tanda hubung dibuang dan huruf setelahnya menjadi besar, persis aturan camelCase di atas.
Kapan Dipakai #
Skenario tipikalnya: skrip membaca data dari atribut lalu memakainya untuk logika halaman. Daftar menu di atas, misalnya, bisa dihitung totalnya dengan membaca data-harga dari setiap butir yang dipilih pengguna — tanpa perlu mencocokkan teks “Kopi susu” dengan tabel harga di JavaScript.
Sebaliknya, jangan memakai data-* untuk menggantikan atribut bawaan yang memang tersedia: tujuan tautan tetap ditulis di href, bukan di data-tujuan.
Ringkasan #
- Atribut
data-nama="nilai"menyimpan data kustom; sah pada semua elemen. - Nama memakai kebab-case; nilai bebas dan selalu berupa string.
- JavaScript membacanya lewat
element.dataset:data-harga→dataset.harga. - Nilainya tidak tampil dan tidak dibacakan pembaca layar — informasi penting tetap harus tampil sebagai konten.
Chapter berikutnya membahas kelompok atribut yang bekerja seperti saklar: boolean attributes.