Cek ulang hasil querySelector atau getElementById sebelum memanggil remove(). Pola paling aman adalah if (element) element.remove(); karena script berhenti saat Anda memanggil method pada nilai null.
Penyebab Hapus Element Gagal di Browser
Browser mengembalikan null ketika node yang dicari tidak ditemukan pada saat kode berjalan. Kondisi ini berbeda dengan node yang sempat ada lalu dihapus oleh kode lain.
- Selector salah: ID atau class tidak cocok dengan HTML.
- DOM belum siap: script berjalan sebelum element dirender.
- Node sudah terhapus: referensi lama dipakai dua kali.
parentNodebernilainull: element sudah lepas dari dokumen atau belum dimasukkan.- Element dinamis belum dibuat: kode hapus berjalan sebelum kode tambah selesai.
TypeError: Cannot read properties of null berarti variabelnya null, sehingga browser tidak bisa membaca remove atau parentNode. NotFoundError berarti parent ditemukan, tetapi child yang diminta bukan anak langsung parent tersebut.
Tabel Troubleshooting Gagal Menghapus Element
Semua konteks di bawah ini untuk JavaScript browser murni, bukan API Node.js.
| Kondisi | Penyebab | Solusi cepat |
|---|---|---|
element.remove() error null |
Selector salah atau DOM belum siap | Query ulang setelah DOM loaded, lalu cek if |
removeChild NotFoundError |
Child bukan anak langsung parent | Cek parent.contains(child) sebelum hapus |
parentNode null |
Node sudah terlepas atau sudah dihapus | Gunakan element.remove() dengan guard |
| Hapus element dinamis gagal | Referensi basi setelah render ulang | Query ulang memakai ID atau event delegation |
Cara Memperbaiki dengan Pengecekan dan Remove Aman
Ikuti urutan ini agar hapus pertama maupun hapus kedua tetap aman:
- Pastikan DOM selesai dimuat sebelum query.
- Query ulang element tepat sebelum dihapus.
- Periksa element tidak
null. - Periksa parent bila memakai
removeChild. - Hapus node, lalu kosongkan referensi bila masih dipakai.
// Salah: error jika #pesan tidak ada
const salah = document.querySelector('#pesan');
salah.remove();
// Benar: aman walau node null atau sudah terhapus
document.addEventListener('DOMContentLoaded', () => {
const element = document.querySelector('#pesan');
if (element) {
element.remove();
}
});
Untuk removeChild, guard tambahan diperlukan karena parent harus valid:
const parent = document.querySelector('#daftar');
const child = document.querySelector('#item-3');
if (parent && child && parent.contains(child)) {
parent.removeChild(child);
}
Cara Mencegah Error saat Hapus Berulang
- Query ulang setiap akan menghapus, jangan simpan referensi lama terlalu lama.
- Gunakan event delegation untuk tombol hapus di daftar dinamis.
- Nonaktifkan tombol hapus setelah klik pertama bila prosesnya asynchronous.
- Pakai
textContent = ''bila hanya ingin mengosongkan teks, bukan membuang node. - Jangan campur
documentdenganfsataurequireNode.js karena kode ini hanya jalan di browser.
FAQ
Apakah remove() lebih aman dari removeChild?
Ya untuk kasus umum, karena remove() tidak memerlukan referensi parent yang terpisah.
Kenapa element masih null padahal ID benar?
Script biasanya berjalan sebelum DOM siap atau element tersebut dibuat ulang secara dinamis.
Bagaimana menghapus banyak element sekaligus tanpa error?
Query ulang memakai querySelectorAll, lalu loop dan cek setiap item sebelum remove().