JavaScript - 文档对象模型 (DOM)

什么是 DOM?

文档对象模型(Document Object Model,简称 DOM)是 HTML 和 XML 文档的编程接口。它将文档的结构表示为一个树状层次结构,每个对象对应于文档的一部分,比如元素、属性或文本节点。

JavaScript - HTML DOM

想象你正在用乐高积木建造一座房子。DOM 就像一份神奇的蓝图,不仅展示了房子是如何建造的,还允许你使用 JavaScript 来操纵和重新排列积木。它是一个强大的工具,架起了网页和编程语言之间的桥梁。

DOM 的关键概念

  1. 节点(Node):文档的每一部分都是一个节点。元素、属性和文本都是不同类型的节点。
  2. 树结构:DOM 将文档表示为树,以 document 对象为根。
  3. 遍历(Traversal):你可以使用各种方法和属性在 DOM 树中导航。
  4. 操纵(Manipulation):DOM 允许你动态地更改文档的结构、样式和内容。

让我们来看一个简单的例子来阐述这些概念:

<!DOCTYPE html>
<html>
<head>
<title>我的第一个 DOM 示例</title>
</head>
<body>
<h1 id="mainHeading">欢迎来到 DOM</h1>
<p>这是一个段落。</p>
</body>
</html>

在这个 HTML 文档中,DOM 树看起来会像这样:

document
└── html
├── head
│   └── title
│       └── "我的第一个 DOM 示例"
└── body
├── h1
│   └── "欢迎来到 DOM"
└── p
└── "这是一个段落。"

什么是 HTML DOM?

HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:

  1. HTML 元素作为对象
  2. 所有 HTML 元素的属性
  3. 访问所有 HTML 元素的方法
  4. 所有 HTML 元素的事件

本质上,HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。

使用 HTML DOM

让我们探索一些使用 HTML DOM 的常见操作:

  1. 访问元素
// 通过 ID 获取元素
const heading = document.getElementById('mainHeading');

// 通过标签名获取元素
const paragraphs = document.getElementsByTagName('p');

// 通过类名获取元素
const highlights = document.getElementsByClassName('highlight');

// 使用 querySelector 进行更复杂的选取
const firstParagraph = document.querySelector('p');

在这些示例中,我们使用不同的方法从 HTML 文档中选择元素。这就像使用魔法棒指向我们网页的特定部分!

  1. 更改内容
// 更改元素的文字内容
heading.textContent = '欢迎来到精彩绝伦的 DOM 世界!';

// 更改元素的 HTML 内容
paragraphs[0].innerHTML = '这个段落已被 <strong>修改</strong>!';

在这里,我们正在更新我们元素的内容。这就像瞬间擦除并重写我们网页的部分内容!

  1. 修改样式
// 更改元素的风格
heading.style.color = 'blue';
heading.style.fontSize = '24px';

通过这些行,我们正在给我们的标题进行改造,改变它的颜色和大小。这就像为你的网页元素请来了一位时尚设计师!

  1. 创建和移除元素
// 创建一个新元素
const newParagraph = document.createElement('p');
newParagraph.textContent = '这是一个新创建的段落。';

// 将新元素添加到文档中
document.body.appendChild(newParagraph);

// 移除一个元素
document.body.removeChild(paragraphs[0]);

在这个例子中,我们扮演网页建筑师的角色的——构建新的元素和拆除旧的元素,只需几行代码!

为什么需要 DOM?

DOM 对于以下原因至关重要:

  1. 动态网页:没有 DOM,网页将会是静态的。DOM 允许我们创建交互性和动态的网页体验。

  2. 关注点分离:DOM 提供了一种使用 JavaScript 操纵网页内容和结构的方法,将其与 HTML 和 CSS 分离开来。

  3. 跨浏览器兼容性:DOM 提供了一个在各个浏览器中工作的标准编程接口,确保了 Web 开发的连贯性。

  4. 事件处理:DOM 允许我们将事件监听器附加到元素上,使我们能够响应用户交互,如点击、按键和鼠标移动。

  5. AJAX 和单页应用:DOM 对于在不重新加载整个页面的情况下更新网页的某些部分至关重要,这是现代 Web 应用的基础。

让我们看一个结合了许多这些概念的例子:

<!DOCTYPE html>
<html>
<head>
<title>待办事项列表</title>
<style>
.completed { text-decoration: line-through; }
</style>
</head>
<body>
<h1>我的待办事项列表</h1>
<input type="text" id="newTodo">
<button id="addTodo">添加待办事项</button>
<ul id="todoList"></ul>

<script>
const newTodoInput = document.getElementById('newTodo');
const addTodoButton = document.getElementById('addTodo');
const todoList = document.getElementById('todoList');

addTodoButton.addEventListener('click', function() {
const todoText = newTodoInput.value;
if (todoText) {
const li = document.createElement('li');
li.textContent = todoText;

li.addEventListener('click', function() {
this.classList.toggle('completed');
});

todoList.appendChild(li);
newTodoInput.value = '';
}
});
</script>
</body>
</html>

这个例子演示了一个简单的待办事项列表应用。它展示了:

  • 使用 DOM 访问元素
  • 创建新元素
  • 修改元素内容和样式
  • 处理事件
  • 不重新加载页面动态更新页面

通过使用 DOM,我们创建了一个交互式的应用程序,它响应用户输入并实时更新。这就是 DOM 的力量!

常用的 DOM 方法和属性

以下是一些常用的 DOM 方法和属性表:

方法/属性 描述
getElementById() 返回具有指定 ID 的元素
getElementsByClassName() 返回具有指定类名的元素集合
getElementsByTagName() 返回具有指定标签名的元素集合
querySelector() 返回匹配 CSS 选择器的第一个元素
querySelectorAll() 返回匹配 CSS 选择器的所有元素
createElement() 创建一个新元素
appendChild() 添加一个新子元素
removeChild() 移除一个子元素
innerHTML 获取或设置元素内的 HTML 内容
textContent 获取或设置元素的文本内容
style 获取或设置元素的行内样式
classList 允许操作元素的类
addEventListener() 将事件处理器附加到元素

总之,DOM 是一个强大的工具,为网页带来了生命力。它允许我们创建动态、交互式的体验,响应用户操作并实时更新。在你继续 Web 开发的旅程中,你会发现 DOM 是创建吸引人和响应迅速的 Web 应用程序的不可或缺的助手。快乐编码!

Credits: Image by storyset