Memahami DOM: JavaScript Bertemu Halaman
18 minitPemulaHTML · CSS · JS
Dalam pelajaran ini
- ▸Terangkan bagaimana pelayar menukar HTML menjadi pokok object (DOM)
- ▸Pilih elemen dengan
querySelector/querySelectorAlldan ubahnya dengantextContentdanclassList - ▸Cipta elemen dengan
createElementdanappend, dan faham kenapainnerHTMLdengan input pengguna berisiko
Idea utama
Apabila pelayar membaca HTML anda, ia membina pokok object JavaScript yang dipanggil DOM. Ubah object itu, dan halaman di skrin turut berubah.
Setakat ini kod anda hanya bercakap dengan Konsol. Sekarang ia boleh menyentuh halaman sebenar. Jambatannya ialah DOM (Document Object Model): setiap tag dalam HTML anda menjadi object yang boleh dicari, dibaca dan diubah oleh skrip anda.
Mencari elemen
// One element: the FIRST match for a CSS selector (or null)
const title = document.querySelector("#title");
const firstItem = document.querySelector(".item");
// Every match, as a list you can loop over
const items = document.querySelectorAll(".item");
console.log(items.length); // 3
for (const item of items) {
console.log(item.textContent);
}Error "Cannot read properties of null"
Error terkenal ini bermaksud querySelector tidak menjumpai apa-apa, jadi anda sedang menggunakan null seolah-olah ia elemen. Semak ejaan selector (# untuk id, . untuk class), dan pastikan tag <script> berada selepas HTML yang digunakannya — sebab itu ia diletakkan di hujung <body>.
Mengubah teks dan class
const statusText = document.querySelector("#status");
statusText.textContent = "Open today!"; // replace the text
statusText.classList.add("highlight"); // add a class
statusText.classList.remove("highlight"); // remove it
statusText.classList.toggle("highlight"); // add if missing, remove if present
statusText.classList.contains("highlight"); // true / falseLebih baik togol class daripada menetapkan gaya satu per satu: rupa kekal dalam CSS, logik kekal dalam JavaScript.
textContent lawan innerHTML
innerHTML — membaca string sebagai HTML
note.innerHTML = "<b>Hi</b>";
// shows: Hi (in bold — a real <b> element)
note.innerHTML = userInput; // ⚠ dangeroustextContent — sentiasa teks biasa
note.textContent = "<b>Hi</b>";
// shows: <b>Hi</b> (exactly those characters)
note.textContent = userInput; // ✓ safeJika anda masukkan teks yang ditaip pengguna ke dalam innerHTML, mereka boleh menaip HTML — termasuk tag yang menjalankan JavaScript. Serangan ini dipanggil cross-site scripting (XSS), dan ia antara bug keselamatan paling biasa di web. Peraturan mudah: teks pengguna masuk ke textContent. Guna innerHTML hanya untuk HTML yang anda tulis sendiri.
Mencipta elemen baharu
const li = document.createElement("li"); // 1. create (not on the page yet)
li.textContent = "Kuih lapis"; // 2. fill it
li.classList.add("item"); // 3. style it
document.querySelector("#menu").append(li); // 4. attach it → now it's visibleDi bawah Step 1 dalam script.js:
1. Pilih semua elemen .item dan tambah class highlight pada setiap satu (CSS untuknya sudah tersedia).
2. Gantikan teks Loading menu… dalam #status dengan mesej yang menyatakan bilangan item, contohnya 3 items on the menu. Kira dengan JavaScript — jangan taip nombor itu sendiri.
Semakan
- #status menunjukkan bilangan item
- Setiap .item ada class highlight
Uji kefahaman
Apa yang anda pelajari
- ✓DOM ialah pokok object yang dibina pelayar daripada HTML anda — ubah DOM, halaman pun berubah.
- ✓
querySelectormendapatkan padanan pertama (ataunull);querySelectorAllmendapatkan semua padanan untuk di-loop. - ✓
classListmenghidupkan dan mematikan gaya;createElement+appendmenambah benda baharu. - ✓Teks pengguna masuk ke
textContent, bukaninnerHTML.
Output konsol daripada kod anda akan dipaparkan di sini.