DOM Manipulation

DOM (Document Object Model) adalah antarmuka pemrograman untuk dokumen web. DOM merepresentasikan halaman web dalam bentuk struktur pohon (tree structure), di mana setiap elemen pada halaman menjadi sebuah objek yang dapat dimanipulasi dengan JavaScript.
Ketika sebuah halaman web dimuat di browser, HTML-nya dikonversi menjadi DOM. Dengan DOM, JavaScript bisa:
Mengakses elemen HTML (misalnya
<p>
,<div>
,<button>
, dll.).Mengubah konten, gaya (CSS), atau atribut dari elemen.
Menambahkan atau menghapus elemen.
Menanggapi event seperti klik atau input pengguna.
Struktur DOM
DOM terdiri dari beberapa bagian utama:
Document – Merupakan akar dari seluruh dokumen, diakses dengan
document
.Element – Setiap tag HTML menjadi elemen di dalam DOM (
<h1>
,<p>
,<div>
, dll.).Attribute – Setiap elemen bisa memiliki atribut (seperti
id
,class
,src
, dll.).Text – Isi teks dalam elemen HTML.
Contoh DOM dari HTML
<!DOCTYPE html>
<html>
<head>
<title>Contoh DOM</title>
</head>
<body>
<h1 id="judul">Halo, DOM!</h1>
<p class="teks">Belajar DOM itu seru.</p>
</body>
</html>
Akan direpresentasikan dalam DOM sebagai struktur pohon:
Document
├── html
│ ├── head
│ │ └── title → "Contoh DOM"
│ └── body
│ ├── h1 (id="judul") → "Halo, DOM!"
│ └── p (class="teks") → "Belajar DOM itu seru."
Mengakses Elemen HTML
Untuk memanipulasi elemen HTML, kita perlu mengaksesnya terlebih dahulu. Ada beberapa metode yang sering digunakan, di antaranya:
getElementById
getElementById
adalah metode bawaan JavaScript yang digunakan untuk memilih satu elemen berdasarkan atribut id
.
let domJudul = document.getElementById("judul");
console.log(domJudul);
Penjelasan
document
→ Objek utama yang merepresentasikan halaman HTML.getElementById("judul")
→ Mengambil elemen berdasarkanid
yang diberikan.
Metode ini hanya mengembalikan satu elemen meskipun ada beberapa elemen dengan ID yang sama dalam HTML.
<h1 id="judul">Halo, DOM!</h1>
Apa yang terjadi jika ID tidak ada?
Jika getElementById
dipanggil dengan ID yang tidak ada di dalam dokumen, maka akan mengembalikan null
.
let elemen = document.getElementById("tidakAda");
console.log(elemen); // Output: null
Apa yang Terjadi Jika Ada ID yang Duplikat?
Secara spesifikasi HTML, ID harus unik. Tapi jika ada lebih dari satu elemen dengan ID yang sama, getElementById
hanya mengembalikan elemen pertama yang ditemukan.
...
<h1 id="judul">Halo, DOM!</h1>
<h1 id="judul">Halo, DOM Lagi!</h1>
...
// Javascript
let domJudul = document.getElementById("judul");
console.log(domJudul);
getElementsByTagName
getElementsByTagName
adalah metode JavaScript yang digunakan untuk mengambil semua elemen HTML dengan tag tertentu. Metode ini mengembalikan HTMLCollection, yaitu kumpulan elemen yang bisa diakses seperti array.
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
// Javascript
let tagParagraph = document.getElementsByTagName("p");
console.log(tagParagraph);
Penjelasan
document
→ Objek utama untuk mengakses DOM.getElementsByTagName("p")
→ Mengambil semua elemen dengan nama tag tertentu.Mengembalikan HTMLCollection, yang mirip dengan array tetapi tidak memiliki metode array seperti
map()
,forEach()
, dll.
getElementsByClassName
getElementsByClassName
adalah metode JavaScript yang digunakan untuk mengambil sekumpulan elemen berdasarkan atribut class
. Berbeda dengan getElementById
yang hanya mengembalikan satu elemen, metode ini mengembalikan HTMLCollection yang berisi semua elemen dengan class yang sesuai.
...
<p class="test">Paragraph 1</p>
<p>Paragraph 2</p>
<p class="test">Paragraph 3</p>
...
// Javascript
let collectionOfTest = document.getElementsByClassName("test");
for (const element of collectionOfTest) {
element.style.color = "red";
}
console.log(collectionOfTest);
Penjelasan
document
→ Objek utama untuk mengakses DOM.getELementsByClassName("test")
→ Mengambil semua elemen dengan attribut kelas tertentu.Mengembalikan HTMLCollection, yang mirip dengan array tetapi tidak memiliki metode array seperti
map()
,forEach()
, dll.Merubah warna setiap elemen yang memiliki kelas “test” menjadi warna merah
querySelector & querySelectorAll
querySelector
dan querySelectorAll
tidak hanya memilih elemen berdasarkan ID atau class, tetapi juga mendukung semua selector CSS. Ini membuatnya lebih fleksibel dibandingkan metode seperti getElementById
, getElementsByClassName
, atau getElementsByTagName
.
Contoh Penggunaan querySelector
1. Memilih Elemen Berdasarkan ID
let element = document.querySelector("#judul");
element.style.color = "blue";
Sama seperti
getElementById("judul")
, tetapi lebih fleksibel karena mendukung selector CSS.
2. Memilih Elemen Berdasarkan Class
let item = document.querySelector(".test");
item.style.backgroundColor = "yellow";
Hanya elemen pertama yang memiliki class
highlight
yang akan dipilih.
3. Memilih Elemen Berdasarkan Tag
let firstParagraph = document.querySelector("p");
firstParagraph.innerText = "Paragraf pertama dipilih!";
Hanya paragraf pertama yang dipilih.
Contoh Penggunaan querySelectorAll
1. Memilih Semua Elemen dengan Class
let items = document.querySelectorAll(".highlight");
items.forEach(item => {
item.style.backgroundColor = "yellow";
});
Berbeda dengan
getElementsByClassName()
, kita bisa langsung menggunakanforEach()
karenaquerySelectorAll
mengembalikan NodeList.
NodeList dan HTMLCollection
Ketika memilih beberapa elemen dalam DOM, JavaScript mengembalikan hasil dalam bentuk NodeList atau HTMLCollection.
NodeList
Kumpulan node (bisa elemen, teks, atau komentar).
Bisa diperoleh dari
querySelectorAll()
.Bisa bersifat statik (tidak berubah saat DOM berubah).
Bisa menggunakan
forEach()
tanpa konversi ke array.
HTMLCollection
Koleksi elemen HTML dari
getElementsByClassName()
ataugetElementsByTagName()
.Live, artinya otomatis diperbarui jika DOM berubah.
Tidak bisa langsung menggunakan
forEach()
, harus dikonversi ke array.
Kesimpulan
manipulasi DOM memungkinkan perubahan dinamis pada halaman web. Untuk memilih elemen:
querySelector
digunakan untuk mengambil satu elemen pertama yang cocok.querySelectorAll
digunakan untuk mengambil semua elemen yang cocok dan bisa langsung digunakan denganforEach()
.getElementById
digunakan untuk memilih elemen berdasarkan ID.getElementsByClassName
dangetElementsByTagName
perlu dikonversi ke array sebelum digunakan denganforEach()
.NodeList lebih fleksibel dan mendukung
forEach()
, sedangkan HTMLCollection selalu memperbarui isinya secara otomatis.
Subscribe to my newsletter
Read articles from Dimas Rizki Mahendra directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Dimas Rizki Mahendra
Dimas Rizki Mahendra
PHP Developer