Pesan appendChild is not a function berarti kode memanggil appendChild() pada nilai yang bukan Node DOM. Perbaikan tercepat: pastikan variabel sebelum titik adalah satu Element valid, lalu berikan Node hasil document.createElement() sebagai argumen. Error ini termasuk TypeError runtime di browser.
Arti Error AppendChild Is Not A Function di DOM
Browser menampilkan TypeError ini ketika target sebelum .appendChild() tidak punya method tersebut. Method itu hanya ada pada objek Node seperti document dan Element.
- String HTML tidak punya
appendChild, hanya teks biasa. - Array dan hasil JSON dari fetch juga bukan Node.
- NodeList dari
querySelectorAll()adalah koleksi, bukan satu elemen.
Contoh salah yang sering muncul:
const list = document.querySelectorAll(".list");
list.appendChild(item);
const data = ["apel", "jeruk"];
data.appendChild(item);
Penyebab Umum dan Tabel Troubleshooting
Tiga pemicu paling sering adalah selector mengembalikan null, koleksi disangka satu elemen, dan parent tertukar dengan child.
| Kondisi | Penyebab | Solusi |
|---|---|---|
| Target null | ID atau class salah | Perbaiki selector, cek ejaan |
| Target NodeList | Pakai querySelectorAll langsung | Pilih indeks atau loop |
| Argumen string | Kirim HTML mentah | Buat Element dulu |
Cara Memperbaiki appendChild dengan Cek Tepat
- Log target dengan
console.log(target)dan pastikan bukan null. - Cek tipenya dengan
target instanceof Nodesebelum append. - Perbaiki selector atau ambil satu indeks dari NodeList.
- Buat child memakai
document.createElement(), lalu tempel ke parent valid.
// SALAH
const list = document.querySelectorAll("#daftar");
list.appendChild("<li>Baru</li>");
// BENAR
const list = document.querySelector("#daftar");
const li = document.createElement("li");
li.textContent = "Baru";
list.appendChild(li);
Baris querySelector mengambil satu Element. Baris createElement membuat Node asli. Baris textContent mengisi teks dengan aman. Baris appendChild akhirnya berjalan karena parent adalah Element dan child adalah Node.
Cara Mencegah Error Terulang
- Jalankan script setelah DOM siap atau taruh sebelum penutup body.
- Bedakan
querySelectoruntuk satu elemen danquerySelectorAlluntuk koleksi. - Gunakan
textContentuntuk teks danappendChildhanya untuk Node. - Simpan nama variabel parent dan child secara jelas agar tidak tertukar.
FAQ
Kenapa querySelectorAll tidak bisa langsung di-appendChild?
Karena hasilnya NodeList berisi banyak elemen, bukan satu Element pemilik method tersebut.
Apakah string HTML bisa dipakai di appendChild?
Tidak, ubah string menjadi Element memakai createElement atau gunakan insertAdjacentHTML.
Kapan pakai append dibanding appendChild?
Pakai append bila perlu menambah teks langsung atau beberapa Node sekaligus.