Bài 6. DOM và sự kiện

DOM là mô hình để JavaScript đọc và thay đổi trang web. Sự kiện giúp trang phản ứng với thao tác của người dùng.

45 phútCơ bản - Trung cấp
Bạn sẽ học được
  • Chọn phần tử bằng querySelector
  • Đổi nội dung, thuộc tính, lớp CSS
  • Lắng nghe sự kiện click, input, submit
  • Tạo và xóa phần tử động
Thuật ngữ cần biết
DOM
Cây các phần tử HTML mà trình duyệt tạo ra từ trang.
Sự kiện (event)
Điều xảy ra như bấm chuột, gõ phím, gửi biểu mẫu.
Trình xử lý sự kiện
Hàm chạy khi sự kiện xảy ra.
Event delegation
Gắn một bộ lắng nghe ở phần tử cha để xử lý các con.

Chọn phần tử

const tieuDe = document.querySelector("h1");
const cacNut = document.querySelectorAll(".nut");
const o = document.getElementById("ten");

Thay đổi trang

tieuDe.textContent = "Tiêu đề mới";
tieuDe.classList.add("noi-bat");
tieuDe.style.color = "green";
o.setAttribute("placeholder", "Nhập tên");

Sự kiện

const nut = document.querySelector("#nut");
nut.addEventListener("click", () => {
  alert("Đã bấm");
});

document.querySelector("#ten").addEventListener("input", e => {
  console.log(e.target.value);
});

Tạo phần tử động

const li = document.createElement("li");
li.textContent = "Việc mới";
document.querySelector("ul").appendChild(li);
li.remove();
Tình huống: Danh sách việc cần làm

Ứng dụng nhỏ kinh điển: ô nhập, nút Thêm, danh sách, bấm vào mục để xóa.

<input id="o"><button id="them">Thêm</button><ul id="ds"></ul>
const ds = document.querySelector("#ds");
document.querySelector("#them").onclick = () => {
  const o = document.querySelector("#o");
  if (!o.value.trim()) return;
  const li = document.createElement("li");
  li.textContent = o.value;
  ds.appendChild(li);
  o.value = "";
};
ds.addEventListener("click", e => e.target.remove());
Mẹo hay

Dùng textContent để chèn chữ; chỉ dùng innerHTML với nội dung bạn tin cậy để tránh lỗ hổng XSS.

Lưu ý

Mã chạy trước khi phần tử tồn tại sẽ nhận null. Đặt script ở cuối trang hoặc dùng defer.

Thực hành
  1. Làm nút đổi màu nền trang giữa sáng và tối.
  2. Bộ đếm số lần bấm.
  3. Biểu mẫu kiểm tra email trước khi gửi, ngăn gửi bằng e.preventDefault().
Tóm tắt bài học
  • querySelector chọn phần tử.
  • addEventListener lắng nghe sự kiện.
  • createElement, appendChild, remove thay đổi cấu trúc trang.