Data Attributes — HTML

Pernah pengen nempelin info tambahan ke elemen HTML buat dipake JavaScript atau CSS — tapi HTML gak punya atribut bawaan yang cocok? Sebelum 2010, developer hac

Pernah pengen nempelin info tambahan ke elemen HTML buat dipake JavaScript atau CSS — tapi HTML gak punya atribut bawaan yang cocok? Sebelum 2010, developer hack pake class aneh kayak class="user-id-42". Berantakan, conflict, susah maintain. Solusinya akhirnya datang: data-* attributes — atribut custom yang BEBAS namanya, asal diawali data-. Kasih nilai apapun, akses dari JS lewat element.dataset.namaKamu.

💡 Bahan bakar framework modern. Alpine.js dan HTMX dua framework baru yang lagi naik daun, dua-duanya ngandelin data-* (atau prefix mirip kayak x- / hx-) buat ngebawa interactivity langsung dari HTML — tanpa nulis JavaScript terpisah. Tombol <button hx-get="/api/news"> langsung fetch data pas diklik. Pattern ini lagi tren karena lebih sederhana dari React di banyak kasus.

Sintaks data-* Attribute

<div class="produk" data-category="elektronik" data-price="150000">
  Laptop Murah
</div>

Aturan Penamaan

Mengakses dari JavaScript

const produk = document.querySelector(".produk");
console.log(produk.dataset.category); // "elektronik"
console.log(produk.dataset.price);    // "150000"

🎭 Analogi sehari-hari

data-* itu kayak label kecil yang ada di balik kerah baju — ada info ukuran, kode produksi, bahan, instruksi cuci. Yang make baju (user) gak perlu liat, tapi vital banget buat tukang laundry (JavaScript) atau penjahit yang mau permak (CSS). Info penting yang nempel di barangnya, tapi gak ganggu tampilan utama.

⚠️ Jebakan yang sering ditemui

TL;DR: data-* = atribut custom buat nempelin info ke elemen HTML, dipake JS/CSS. Sintaks: <div data-user-id="42"> → akses el.dataset.userId (kebab-case → camelCase). Value SELALU string — parseInt() kalau perlu number. CSS selector [data-state="active"] powerful buat styling state. Bukan tempat data sensitif (terlihat di view-source). Bahan bakar framework modern: Alpine.js (x-), HTMX (hx-) — interactivity langsung dari HTML.

Yang akan kamu pelajari