Panggil element.closest(selector) dari tombol yang diklik, maka browser menelusuri ke atas sampai menemukan ancestor yang cocok, termasuk element itu sendiri. Pola ini cocok untuk kasus tombol di dalam kartu produk, baris tabel, atau item daftar. Kegagalan paling sering bukan metodenya, melainkan script jalan sebelum DOM siap atau selector tidak cocok dengan struktur HTML.
Jawaban Cepat Closest untuk Element Terdekat
Sintaksnya ringkas. Kamu mulai dari satu element, lalu meminta ancestor terdekat yang cocok dengan selector CSS.
const card = button.closest('.card');
Contoh nyata, tombol di dalam kartu langsung menemukan pembungkusnya. parentElement hanya naik satu tingkat, querySelector justru turun mencari anak. closest() naik lapis demi lapis sampai cocok atau mengembalikan null.
- Gunakan
closest('.card')untuk mencari pembungkus kartu dari tombol. - Gunakan
parentElementbila target pasti satu tingkat di atas. - Gunakan
querySelectorbila target berada di dalam element, bukan di atasnya.
Langkah Memakai Closest di DOM yang Sudah Dimuat
Ikuti urutan ini agar hasilnya konsisten di browser:
1. Pastikan script jalan setelah DOM siap. Letakkan script sebelum penutup body atau bungkus dengan DOMContentLoaded.
2. Ambil element awal lewat event atau querySelector. Pada klik, event.target biasanya jadi titik awal paling tepat.
3. Panggil closest dengan selector CSS valid, misalnya .card, tr, atau [data-item].
4. Cek hasil null sebelum akses properti. Pola aman memakai if (card) sebelum membaca dataset atau mengubah kelas.
document.addEventListener('click', (event) => {
const button = event.target.closest('.btn-hapus');
if (!button) return;
const card = button.closest('.card');
if (card) card.remove();
});
Hasil Closest, Null, dan Selector yang Sering Gagal
Nilai null berarti tidak ada ancestor yang cocok, bukan berarti browser rusak. Penyebab umum:
- Selector salah tulis, misalnya titik hilang pada nama kelas.
- Element awal berada di luar parent yang dicari.
- Memanggil
closestpada SVG atau text node tanpa penanganan khusus. - Element dibuat dinamis tetapi listener dipasang sebelum element muncul.
| Kondisi | Penyebab | Solusi |
|---|---|---|
| Selalu null | Kelas parent beda | Samakan selector dengan HTML |
| Error properti null | Langsung akses hasil | Cek if (hasil) dahulu |
| Tombol dinamis gagal | Listener terlalu spesifik | Pakai delegation di parent |
const item = btn.closest('li[data-id]');
if (item) {
console.log(item.dataset.id);
}
Kode di atas mencari li terdekat yang punya atribut data-id. Pemeriksaan if mencegah error saat tombol tidak berada di dalam daftar.
FAQ
Apakah closest memeriksa element itu sendiri?
Ya, pengecekan mulai dari element pemanggil sebelum naik ke parent.
Kenapa closest mengembalikan null padahal parent ada?
Selector biasanya tidak cocok dengan parent atau script jalan sebelum DOM lengkap.
Kapan memakai event delegation dengan closest?
Pakai saat tombol dibuat dinamis, pasang satu listener di parent lalu saring klik dengan closest.