1. DOM 基本概念

什么是 DOM

DOM(Document Object Model)是 HTML 和 XML 文档的编程接口。它提供了一组标准的对象,使开发者能够动态访问和更新文档的内容、结构和样式。DOM 把文档表示为一个树结构,其中每个节点都是文档的一部分。

DOM 树的结构

DOM 树是层次化的结构,包含了文档的所有元素。树的每个节点都代表文档中的一部分,比如元素、属性或文本内容。

第七章:DOM 操作与事件处理 - 图1

常用 DOM 操作方法

以下是一些常用的 DOM 操作方法:

  • getElementById(id): 根据元素的 ID 获取元素
  • querySelector(selector): 根据 CSS 选择器获取元素
  • createElement(tagName): 创建一个新的元素
  • appendChild(node): 将一个新的子节点添加到某个父节点中
  • removeChild(node): 从某个父节点中移除一个子节点
  1. // 获取元素
  2. const element = document.getElementById("myElement");
  3. const elementBySelector = document.querySelector(".myClass");
  4. // 创建新元素
  5. const newElement = document.createElement("div");
  6. newElement.textContent = "Hello, World!";
  7. // 添加新元素到 DOM
  8. document.body.appendChild(newElement);
  9. // 移除元素
  10. document.body.removeChild(newElement);

2. 事件处理

事件的基本概念

事件是用户或浏览器执行的特定动作,比如点击按钮、加载页面或按下键盘。事件处理是指编写代码来响应这些事件。

添加与移除事件监听器

可以使用 addEventListener 方法为元素添加事件监听器,并使用 removeEventListener 方法移除事件监听器。

  1. // 获取元素
  2. const button = document.getElementById("myButton");
  3. // 事件处理函数
  4. function handleClick() {
  5. alert("Button clicked!");
  6. }
  7. // 添加事件监听器
  8. button.addEventListener("click", handleClick);
  9. // 移除事件监听器
  10. button.removeEventListener("click", handleClick);

事件冒泡与捕获

事件冒泡和捕获是事件传播的两个阶段。冒泡是指事件从目标元素开始向上传播到根元素,而捕获是指事件从根元素向下传播到目标元素。

  1. // 获取元素
  2. const parent = document.getElementById("parent");
  3. const child = document.getElementById("child");
  4. // 添加事件监听器
  5. parent.addEventListener(
  6. "click",
  7. () => {
  8. alert("Parent clicked!");
  9. },
  10. false
  11. ); // 冒泡阶段
  12. child.addEventListener(
  13. "click",
  14. (event) => {
  15. alert("Child clicked!");
  16. event.stopPropagation(); // 阻止事件传播
  17. },
  18. false
  19. ); // 冒泡阶段

3. 实战练习

实现动态内容的添加与删除

通过 DOM 操作,可以实现动态添加和删除内容的功能。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Dynamic Content</title>
  7. </head>
  8. <body>
  9. <div id="content"></div>
  10. <button id="addBtn">Add Content</button>
  11. <button id="removeBtn">Remove Content</button>
  12. <script>
  13. const contentDiv = document.getElementById("content");
  14. const addBtn = document.getElementById("addBtn");
  15. const removeBtn = document.getElementById("removeBtn");
  16. addBtn.addEventListener("click", () => {
  17. const newParagraph = document.createElement("p");
  18. newParagraph.textContent = "This is a new paragraph.";
  19. contentDiv.appendChild(newParagraph);
  20. });
  21. removeBtn.addEventListener("click", () => {
  22. if (contentDiv.lastChild) {
  23. contentDiv.removeChild(contentDiv.lastChild);
  24. }
  25. });
  26. </script>
  27. </body>
  28. </html>

实现表单验证

通过事件处理,可以实现表单的实时验证。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Form Validation</title>
  7. </head>
  8. <body>
  9. <form id="myForm">
  10. <label for="email">Email:</label>
  11. <input type="email" id="email" name="email" required />
  12. <span id="error" style="color: red; display: none;"
  13. >Invalid email address</span
  14. >
  15. <button type="submit">Submit</button>
  16. </form>
  17. <script>
  18. const form = document.getElementById("myForm");
  19. const emailInput = document.getElementById("email");
  20. const errorSpan = document.getElementById("error");
  21. emailInput.addEventListener("input", () => {
  22. if (emailInput.validity.valid) {
  23. errorSpan.style.display = "none";
  24. } else {
  25. errorSpan.style.display = "block";
  26. }
  27. });
  28. form.addEventListener("submit", (event) => {
  29. if (!emailInput.validity.valid) {
  30. event.preventDefault();
  31. errorSpan.style.display = "block";
  32. }
  33. });
  34. </script>
  35. </body>
  36. </html>

通过以上内容的学习,你已经掌握了基本的 DOM 操作和事件处理方法。接下来可以通过实际项目练习更加深入地理解和应用这些知识。