Pelajari cara memanipulasi Document Object Model (DOM) untuk membuat halaman web interaktif
DOM (Document Object Model) adalah representasi struktur halaman web yang memungkinkan JavaScript mengubah konten, struktur, dan style secara dinamis.
// Mendapatkan elemen
const header = document.getElementById('header');
const buttons = document.querySelectorAll('.btn');
// Mengubah konten
header.textContent = 'Judul Baru';
header.innerHTML = '<span>Judul</span> Baru';
// Mengubah style
header.style.color = '#9333ea';
header.style.fontSize = '2.5rem';
đ Penjelasan Detail:
âĸ getElementById()
- Memilih elemen berdasarkan ID
âĸ querySelector()
- Memilih elemen pertama yang cocok dengan selector CSS
âĸ querySelectorAll()
- Memilih semua elemen yang cocok
âĸ textContent
- Mengubah teks dalam elemen
âĸ innerHTML
- Mengubah HTML dalam elemen
// Membuat elemen baru
const newDiv = document.createElement('div');
newDiv.className = 'card';
newDiv.textContent = 'Kartu Baru';
// Menambahkan ke DOM
document.body.appendChild(newDiv);
// Event listeners
buttons.forEach(btn => {
btn.addEventListener('click', e => {
console.log('Tombol diklik!');
});
});
// Manipulasi class
header.classList.add('active');
header.classList.remove('hidden');
header.classList.toggle('dark-mode');
Semua metode DOM dasar didukung oleh semua browser modern. Beberapa fitur baru seperti classList didukung sejak IE10+.
Method | Description | Example |
---|---|---|
getElementById() |
Memilih elemen berdasarkan ID | document.getElementById('header') |
querySelector() |
Memilih elemen pertama yang cocok | document.querySelector('.btn') |
querySelectorAll() |
Memilih semua elemen yang cocok | document.querySelectorAll('p') |
createElement() |
Membuat elemen baru | document.createElement('div') |
appendChild() |
Menambahkan elemen anak | parent.appendChild(child) |
đ Penjelasan Detail:
âĸ getElementById - Paling cepat untuk memilih elemen dengan ID
âĸ querySelector - Fleksibel dengan sintaks CSS selector
âĸ querySelectorAll - Mengembalikan NodeList (bukan Array)
âĸ createElement - Membuat elemen tapi belum ditambahkan ke DOM
âĸ appendChild - Menambahkan elemen ke akhir parent
Property/Method | Description | Use Case |
---|---|---|
classList |
Manipulasi class CSS | element.classList.add('active') |
dataset |
Akses data attributes | element.dataset.userId |
closest() |
Mencari parent terdekat | element.closest('.container') |
matches() |
Memeriksa kecocokan selector | element.matches('button.active') |
insertAdjacentHTML() |
Menambahkan HTML secara fleksibel | element.insertAdjacentHTML('beforeend', html) |
Untuk manipulasi DOM yang kompleks, gunakan DocumentFragment untuk meminimalkan reflow. Event delegation lebih efisien untuk banyak elemen.
Gunakan event delegation untuk elemen dinamis, minimalkan manipulasi DOM langsung, dan cache referensi elemen yang sering digunakan.
// â
Good - Event delegation
document.addEventListener('click', e => {
if (e.target.matches('.btn')) {
// Handle button click
}
});
// â
Good - Caching elements
const header = document.getElementById('header');
const buttons = document.querySelectorAll('.btn');
// â Avoid - Inline event handlers
<button onclick="handleClick()">Click</button>
// â Avoid - Frequent DOM updates
for (let i = 0; i < 1000; i++) {
document.body.appendChild(document.createElement('div'));
}
đ Penjelasan Detail:
âĸ Event delegation - Lebih efisien untuk elemen dinamis
âĸ Cache references - Hindari query DOM berulang
âĸ Batch updates - Gunakan DocumentFragment untuk banyak perubahan
âĸ Debounce events - Untuk scroll/resize yang sering terjadi
âĸ Virtual DOM - Pertimbangkan untuk aplikasi kompleks
Pelajari lebih lanjut tentang DOM Manipulation di MDN Web Docs atau buku-buku JavaScript modern seperti "Eloquent JavaScript".
Untuk aplikasi kompleks, pertimbangkan library seperti React, Vue, atau Angular yang menggunakan Virtual DOM untuk performa lebih baik.