Kamu sedang membuat daftar belanja interaktif. Setiap kali pengguna mencentang item, kamu perlu mengingat ID produknya agar bisa menghitung total harga. Di sinilah keputusan muncul: simpan ID itu di mana? Di atribut elemen, di objek jQuery, atau di variabel global? Tiga pilihan ini sering membingungkan, padahal masing-masing punya konsekuensi berbeda saat kode bertambah besar.
Kenapa Penyimpanan Data Penting?
Setiap interaksi di halaman web biasanya butuh konteks. Tombol “hapus” perlu tahu baris mana yang harus dihapus. Kotak centang perlu tahu ID produk apa yang diwakilinya. Tanpa tempat penyimpanan yang jelas, kamu akan menulis kode yang saling bergantung dan sulit dilacak. Memilih metode yang tepat sejak awal menghemat waktu debugging nanti.
Pilihan 1: Variabel Global
Ini cara paling sederhana dan langsung. Kamu mendeklarasikan variabel di luar fungsi, lalu mengisinya dengan data yang dibutuhkan.
var totalHarga = 0;
var daftarItem = [];
$('.item').on('click', function() {
daftarItem.push($(this).data('id'));
totalHarga += 5000;
$('.total').text(totalHarga);
});
Kelemahannya, variabel global mudah bentrok dengan kode lain, terutama jika halamanmu memuat banyak skrip. Semakin besar proyek, semakin sulit melacak siapa yang mengubah nilai variabel. Metode ini cocok untuk prototipe cepat atau halaman dengan satu interaksi tunggal, tapi tidak disarankan untuk aplikasi yang lebih kompleks.
Pilihan 2: Atribut data-* dan Dataset
HTML5 memperkenalkan atribut kustom data-* yang bisa dibaca langsung dari elemen. jQuery menyediakan cara mudah mengaksesnya lewat .data().
<button class="hapus" data-id="42" data-nama="Susu">Hapus</button>
Di JavaScript, kamu bisa membacanya dengan element.dataset.id atau $(element).data('id'). Nilai yang disimpan di atribut ini terlihat di HTML, sehingga memudahkan inspeksi saat debugging. Namun, data yang disimpan harus berupa string atau angka sederhana. Untuk objek atau array, kamu perlu melakukan serialisasi manual, misalnya dengan JSON.stringify.
Atribut data juga berguna saat kamu ingin menyimpan informasi yang tidak berubah sering. Contohnya, ID produk atau kategori yang memang sudah ada sejak elemen dibuat. Jika data sering berubah karena interaksi pengguna, menyimpannya di atribut bisa membuat HTML terlihat berantakan dan proses update menjadi lambat.
Pilihan 3: Metode .data() jQuery
jQuery punya penyimpanan internal yang terpisah dari DOM. Kamu bisa menyimpan objek JavaScript apa pun tanpa mengubah atribut elemen.
$('#produk-1').data('detail', {
id: 1,
nama: 'Susu',
harga: 15000
});
var detail = $('#produk-1').data('detail');
console.log(detail.harga); // 15000
Kelebihan utamanya, kamu bisa menyimpan struktur data kompleks dan mengambilnya kembali tanpa konversi. Data ini tidak muncul di HTML, jadi tampilan tetap bersih. Kekurangannya, data yang disimpan lewat .data() tidak otomatis tersinkron dengan atribut data-* jika kamu mengubahnya lewat JavaScript murni. Selain itu, jika elemen dihapus dari DOM, data yang terkait juga hilang. Jadi pastikan kamu mengambil data sebelum elemen dihapus, atau simpan di tempat lain jika perlu dipertahankan.
Perbandingan Ketiga Metode
| Aspek | Variabel Global | Atribut data-* | .data() jQuery |
|---|---|---|---|
| Kemudahan | Sangat mudah | Mudah | Mudah |
| Jenis data | Semua jenis | String/angka | Semua jenis |
| Terlihat di HTML | Tidak | Ya | Tidak |
| Risiko bentrok | Tinggi | Rendah | Rendah |
| Cocok untuk | Prototipe | Data statis | Data dinamis kompleks |
Pilih variabel global hanya jika kamu yakin halaman tidak akan berkembang. Untuk data yang menempel pada elemen dan jarang berubah, atribut data-* adalah pilihan paling transparan. Sedangkan untuk menyimpan state interaktif seperti daftar item yang dipilih atau konfigurasi widget, .data() menawarkan keseimbangan antara kebersihan kode dan fleksibilitas.
Contoh Kasus: Daftar Tugas Interaktif
Misalkan kamu membuat daftar tugas dengan fitur tandai selesai. Setiap tugas punya ID dan status. Kamu bisa menyimpan status di atribut data-status yang diperbarui setiap kali pengguna mengklik. Namun, jika kamu perlu menyimpan riwayat perubahan atau metadata lain, .data() lebih cocok. Untuk referensi lebih lanjut tentang membangun daftar tugas, lihat Membuat Daftar Tugas Interaktif dengan jQuery.
Saat memilih elemen untuk menyimpan data, pastikan selector-nya tepat. Kamu bisa membaca panduan Memilih Selector jQuery: ID, Class, Atribut, atau Filter? agar tidak salah sasaran.
Kapan Sebaiknya Menghindari Variabel Global?
Jika kode kamu akan digabung dengan pustaka lain atau memiliki banyak modul, hindari variabel global. Selain risiko bentrok, variabel global membuat pengujian unit lebih sulit karena state-nya sulit diisolasi. Sebagai gantinya, bungkus data dalam objek namespace atau gunakan modul pattern.
Tips Tambahan: Konsistensi Lebih Penting daripada Metode
Apa pun metode yang kamu pilih, terapkan secara konsisten di seluruh proyek. Campur aduk antara atribut data-* dan .data() untuk hal yang sama justru menimbulkan kebingungan. Tentukan satu pola, lalu dokumentasikan di komentar kode atau catatan tim.
Untuk memperdalam dasar-dasar jQuery dan melihat praktik nyata, kunjungi Tips Praktis jQuery untuk Pemula: Mulai dari Kasus Nyata.
Ringkasan
Variabel global cocok untuk prototipe cepat, atribut data-* baik untuk data statis yang terlihat di HTML, dan .data() jQuery fleksibel untuk data dinamis kompleks. Pilih berdasarkan kebutuhan proyek dan tetap konsisten. Jika kamu ingin membaca berita teknologi dari sumber terpercaya, kunjungi indowarta yang menyajikan informasi berdasarkan fakta dengan penulis berpengalaman.
Pertanyaan yang Sering Diajukan
Apakah .data() jQuery bisa menyimpan fungsi?
Bisa. jQuery memungkinkan penyimpanan tipe data apa pun, termasuk fungsi. Namun, menyimpan fungsi di data elemen jarang diperlukan dan bisa mempersulit debugging. Simpan fungsi di variabel terpisah atau objek modul.
Apa bedanya .data() dengan .attr(‘data-*’)?
.data() membaca nilai dari atribut saat pertama kali dipanggil, lalu menyimpannya di cache internal. Jika atribut diubah setelahnya, .data() tidak otomatis memperbarui nilai cache. Sebaliknya, .attr() selalu membaca atribut aktual di DOM.
Bisakah data yang disimpan dengan .data() hilang?
Ya, jika elemen dihapus dari DOM, data yang terkait juga akan hilang. Untuk data yang perlu bertahan, simpan di variabel global atau localStorage.