Manipulasi DOM

DOM (Document Object Model) adalah representasi dari dokumen HTML sebagai pohon objek yang memungkinkan JavaScript untuk mengubah struktur, gaya, dan konten halaman web.

Konsep Dasar DOM

DOM adalah API (Application Programming Interface) yang memungkinkan JavaScript untuk:

  • Mengakses elemen HTML
  • Mengubah konten HTML
  • Mengubah atribut HTML
  • Mengubah style CSS
  • Menambah/menghapus elemen HTML
  • Menanggapi event HTML
// Struktur DOM
document
├── html
│   ├── head
│   │   ├── title
│   │   └── meta
│   └── body
│       ├── h1
│       ├── p
│       └── div
└── ...

Seleksi Elemen

Beberapa cara untuk memilih elemen dalam DOM:

Method Deskripsi Contoh
getElementById() Memilih elemen berdasarkan ID document.getElementById('header')
getElementsByClassName() Memilih elemen berdasarkan class document.getElementsByClassName('item')
getElementsByTagName() Memilih elemen berdasarkan tag document.getElementsByTagName('p')
querySelector() Memilih elemen pertama yang cocok dengan selector CSS document.querySelector('.container')
querySelectorAll() Memilih semua elemen yang cocok dengan selector CSS document.querySelectorAll('button')
// Contoh seleksi elemen
const header = document.getElementById('header');
const items = document.getElementsByClassName('item');
const paragraphs = document.getElementsByTagName('p');
const container = document.querySelector('.container');
const buttons = document.querySelectorAll('button');

Manipulasi Konten

Mengubah Konten

// innerHTML - mengubah konten HTML
document.getElementById('demo').innerHTML = '<strong>Hello</strong> World!';

// textContent - mengubah teks saja (lebih aman)
document.getElementById('demo').textContent = 'Hello World!';

// innerText - mirip textContent tapi memperhatikan styling
document.getElementById('demo').innerText = 'Hello World!';

Mengubah Atribut

// Mengubah atribut
document.getElementById('myImage').src = 'new-image.jpg';

// Mengubah style
document.getElementById('demo').style.color = 'red';
document.getElementById('demo').style.fontSize = '20px';

// Mengubah class
document.getElementById('demo').className = 'new-class';
document.getElementById('demo').classList.add('active');
document.getElementById('demo').classList.remove('inactive');
document.getElementById('demo').classList.toggle('hidden');

Membuat dan Menghapus Elemen

// Membuat elemen baru
const newDiv = document.createElement('div');
newDiv.textContent = 'Ini div baru';

// Menambahkan ke dokumen
document.body.appendChild(newDiv);

// Menambahkan sebelum elemen tertentu
const target = document.getElementById('target');
document.body.insertBefore(newDiv, target);

// Menghapus elemen
const element = document.getElementById('toBeRemoved');
element.parentNode.removeChild(element);

// Mengganti elemen
const oldElement = document.getElementById('old');
const newElement = document.createElement('div');
newElement.textContent = 'Ini elemen baru';
oldElement.parentNode.replaceChild(newElement, oldElement);

Event Delegation

Teknik untuk menangani event pada elemen yang belum ada atau banyak elemen sekaligus.

// Tanpa delegation (hanya bekerja untuk elemen yang sudah ada)
document.querySelectorAll('.item').forEach(item => {
    item.addEventListener('click', function() {
        console.log('Item diklik');
    });
});

// Dengan delegation (bekerja untuk elemen sekarang dan masa depan)
document.getElementById('itemContainer').addEventListener('click', function(e) {
    if (e.target.classList.contains('item')) {
        console.log('Item diklik:', e.target.textContent);
    }
});

Praktik Mandiri

Coba manipulasi DOM berikut:

// Fungsi untuk menambah item ke list
function tambahItem() {
    const input = document.getElementById('itemInput');
    const value = input.value.trim();
    
    if (value) {
        const list = document.getElementById('itemList');
        const newItem = document.createElement('li');
        newItem.textContent = value;
        newItem.className = 'list-group-item';
        
        // Tambah tombol hapus
        const deleteBtn = document.createElement('button');
        deleteBtn.textContent = 'Hapus';
        deleteBtn.className = 'btn btn-sm btn-danger float-end';
        deleteBtn.addEventListener('click', function() {
            list.removeChild(newItem);
        });
        
        newItem.appendChild(deleteBtn);
        list.appendChild(newItem);
        input.value = '';
    }
}

// Event listener untuk form
document.getElementById('itemForm').addEventListener('submit', function(e) {
    e.preventDefault();
    tambahItem();
});

Daftar Item

  • Item Contoh