Manipulasi DOM dengan JavaScript
Pengantar DOM (Document Object Model)
DOM adalah representasi struktur dokumen HTML sebagai pohon objek yang dapat dimanipulasi dengan JavaScript. Setiap elemen HTML menjadi "node" dalam pohon ini, dan kita dapat mengakses, mengubah, menambah, atau menghapus node tersebut secara dinamis.
Dengan DOM, kita bisa membuat halaman web yang interaktif dan responsif. Mulai dari mengubah teks, menambahkan elemen baru, merespons event klik, hingga membuat animasi - semua bisa dilakukan dengan memanipulasi DOM menggunakan JavaScript.
Memilih Elemen DOM
Ada beberapa cara untuk memilih elemen dalam DOM:
1. getElementById
const header = document.getElementById('header');
Memilih elemen berdasarkan ID-nya (unik dalam satu dokumen).
2. getElementsByClassName
const items = document.getElementsByClassName('item'); // HTMLCollection
Memilih semua elemen dengan class tertentu (mengembalikan HTMLCollection).
3. getElementsByTagName
const paragraphs = document.getElementsByTagName('p'); // HTMLCollection
Memilih semua elemen dengan tag tertentu.
4. querySelector
const firstItem = document.querySelector('.item'); // Elemen pertama
Memilih elemen pertama yang cocok dengan selector CSS.
5. querySelectorAll
const allItems = document.querySelectorAll('.item'); // NodeList
Memilih semua elemen yang cocok dengan selector CSS (mengembalikan NodeList).
Mengubah Elemen DOM
Setelah memilih elemen, kita bisa memodifikasi propertinya:
1. Mengubah Konten
// Mengubah teks
element.textContent = 'Teks baru';
// Mengubah HTML
element.innerHTML = '<strong>Tebal</strong> teks';
2. Mengubah Atribut
// Mengubah atribut
element.setAttribute('href', 'https://example.com');
// Mengambil atribut
const href = element.getAttribute('href');
// Menghapus atribut
element.removeAttribute('title');
3. Mengubah Style
// Mengubah style langsung
element.style.color = 'red';
element.style.backgroundColor = '#f0f0f0';
// Menambahkan/menghapus class
element.classList.add('active');
element.classList.remove('inactive');
element.classList.toggle('hidden');
Demo Interaktif: Mengubah Style
Coba ubah style teks ini!
Membuat dan Menambahkan Elemen
Kita bisa membuat elemen baru dan menambahkannya ke DOM:
1. Membuat Elemen Baru
const newDiv = document.createElement('div');
newDiv.textContent = 'Ini div baru';
newDiv.className = 'box';
2. Menambahkan ke DOM
// Menambahkan sebagai anak terakhir
parentElement.appendChild(newDiv);
// Menambahkan sebelum elemen tertentu
parentElement.insertBefore(newDiv, referenceElement);
// Menambahkan HTML string
container.innerHTML += '<div class="box">Box baru</div>';
3. Clone Node
const original = document.querySelector('.template');
const clone = original.cloneNode(true); // true untuk deep clone
document.body.appendChild(clone);
Demo Interaktif: Menambahkan Item
- Item 1
- Item 2
Menghapus Elemen
Ada beberapa cara untuk menghapus elemen dari DOM:
1. removeChild
const parent = document.getElementById('parent');
const child = document.getElementById('child');
parent.removeChild(child);
2. remove()
const element = document.getElementById('element-to-remove');
element.remove();
3. Mengosongkan Elemen
document.getElementById('container').innerHTML = '';
Event Handling
Event adalah tindakan yang terjadi di halaman web (klik, input, hover, dll). Kita bisa merespons event dengan event listener.
1. Menambahkan Event Listener
const button = document.getElementById('myButton');
// Cara 1: Menggunakan properti
button.onclick = function() {
console.log('Button diklik!');
};
// Cara 2: addEventListener (lebih fleksibel)
button.addEventListener('click', function(event) {
console.log('Button diklik!', event);
});
2. Jenis-Jenis Event
// Klik
element.addEventListener('click', handleClick);
// Input/change
inputElement.addEventListener('input', handleInput);
inputElement.addEventListener('change', handleChange);
// Keyboard
document.addEventListener('keydown', handleKeyDown);
// Mouse
element.addEventListener('mouseover', handleMouseOver);
element.addEventListener('mouseout', handleMouseOut);
// Form
formElement.addEventListener('submit', handleSubmit);
3. Event Delegation
// Daripada menambahkan listener ke setiap item
document.getElementById('list').addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('Item diklik:', event.target.textContent);
}
});
Berguna untuk elemen dinamis atau banyak elemen sejenis.
Demo Interaktif: Event Handling
Traversing DOM
Traversing berarti berpindah dari satu elemen ke elemen lain dalam hierarki DOM.
1. Navigasi ke Parent
const child = document.getElementById('child');
const parent = child.parentNode; // atau parentElement
2. Navigasi ke Children
const parent = document.getElementById('parent');
const firstChild = parent.firstChild; // atau firstElementChild
const lastChild = parent.lastChild; // atau lastElementChild
const children = parent.children; // HTMLCollection
3. Navigasi ke Sibling
const middle = document.getElementById('middle');
const prev = middle.previousSibling; // atau previousElementSibling
const next = middle.nextSibling; // atau nextElementSibling
Manipulasi Form
Form adalah elemen penting yang sering dimanipulasi dengan JavaScript.
1. Mengakses Nilai Form
const input = document.getElementById('username');
console.log(input.value); // Mendapatkan nilai input
const select = document.getElementById('country');
console.log(select.value); // Mendapatkan nilai yang dipilih
const checkbox = document.getElementById('subscribe');
console.log(checkbox.checked); // true/false
2. Validasi Form
formElement.addEventListener('submit', function(event) {
const username = document.getElementById('username').value;
if (username.length < 5) {
event.preventDefault(); // Mencegah pengiriman form
alert('Username minimal 5 karakter');
}
});
Demo Interaktif: Validasi Form
Kesimpulan
Manipulasi DOM adalah inti dari pengembangan web interaktif dengan JavaScript. Dengan memahami cara memilih, mengubah, menambah, dan menghapus elemen DOM, serta menangani event, Anda bisa membuat halaman web yang dinamis dan responsif.
Beberapa praktik terbaik dalam manipulasi DOM termasuk menggunakan event delegation untuk elemen dinamis, meminimalkan manipulasi DOM langsung (karena mahal secara performa), dan memanfaatkan metode modern seperti querySelector dan classList untuk kode yang lebih bersih dan mudah dibaca.
Dengan menguasai konsep-konsep dasar yang telah dibahas di artikel ini, Anda sudah memiliki fondasi yang kuat untuk membangun aplikasi web yang lebih interaktif dan kompleks menggunakan JavaScript.