操作 DOM 树的节点

要操作 DOM 树的节点,您需要直接定位它们或从某个起始点开始逐步导航。DOM 的 Document 接口作为访问网页内容的入口,提供了一套丰富的属性和方法来定位特定的节点。这些方法可以返回单个节点或节点数组。

以下是使用 HTML 页面的示例,演示了最重要的方法。当点击按钮时,会调用 show 函数。示例代码会在其中展示。

使用 ID 定位元素

使用 id 属性标记 HTML 元素是一种简单、快速且精确的定位方法。例如,<p id="p2">,然后使用该 id 作为 getElementById() 的参数来获取元素。下面的代码示例展示了如何通过 id 定位元素并显示其内容。

function show() {
  "use strict";
  const elem = document.getElementById("p2");
  alert(elem.innerHTML);
}

getElementById 方法返回单个元素(如果 id 不唯一,则返回第一个匹配的元素)。

如果该元素不是文本节点,而是具有子节点的节点,返回值是该元素及其所有子元素。

function show() {
  "use strict";
  const elem = document.getElementById("div_3");
  alert(elem.innerHTML);
}
// 预期输出:
// <p>Another paragraph 1</p>
// <p>Another paragraph 2</p>
// <p>Another paragraph 3</p>

使用标签名定位元素

另一种查找 HTML 页面中元素的方法是 getElementsByTagName 方法。它接受一个标签名,例如 'h1''div''p',并返回所有匹配的元素,返回的是一个数组。

下面我们使用该方法获取所有 'div' 元素的数组。

function show() {
  "use strict";

  // 如果要在整个文档中查找,必须指定 'document'
  let elemArray = document.getElementsByTagName("div");
  // 遍历所有数组元素
  for (let i = 0; i < elemArray.length; i++) {
    alert(elemArray[i].innerHTML);
  }

  alert("Part 2");

  // 如果只想在子树中查找,必须先定位该子树的根节点
  const elem = document.getElementById("div_2");
  elemArray = elem.getElementsByTagName("div");
  for (let i = 0; i < elemArray.length; i++) {
    alert(elemArray[i].innerHTML);
  }
}

使用类名定位元素

接下来,元素可以通过与其关联的 CSS 类选择器来定位。类选择器可以有复杂的语法,这里我们只使用类名的简单形式。

下面的示例获取所有使用了 CSS 类 text 的元素,这通过第一个 div 中的三个段落实现。请注意,其他段落并不会被选中。

function show() {
  "use strict";

  let elemArray = document.getElementsByClassName("text");
  // 遍历所有数组元素
  for (let i = 0; i < elemArray.length; i++) {
    alert(elemArray[i].innerHTML);
  }
}

使用查询选择器

前面提到的定位方法使用了特定的语法来定位元素。但也有一种通用方法,可以结合所有这些方法的功能——甚至更多功能。

查询选择器使用复杂的语法,包括 HTML 元素的 id、HTML 元素名称、HTML 属性、CSS 类、位置等。它可以定位单个元素或多个元素的列表。要获取满足选择器的第一个元素,使用 querySelector 方法。如果要获取所有匹配的元素,使用 querySelectorAll

function show() {
  "use strict";

  // '#' 通过 ID 定位,'.' 通过 CSS 类定位
  let elemArray = document.querySelectorAll("h1, #p2, .head_2");
  // 遍历所有数组元素
  for (let i = 0; i < elemArray.length; i++) {
    alert(elemArray[i].innerHTML);
  }
}

导航 DOM 树

您可以在 DOM 树中从根节点到叶子节点进行导航。这是通过定位一个元素,并将该节点作为新的根节点进行后续的导航步骤。

function show() {
  "use strict";

  // 从 'div_2' 开始
  const elem_1 = document.getElementById("div_2");
  // 使用该元素作为新的根节点进行进一步选择
  const elemArray = elem_1.getElementsByTagName("h2");
  for (let i = 0; i < elemArray.length; i++) {
    alert(elemArray[i].innerHTML);
  }
  // 只选择了子节点 'h2'!第一个 'h2' 被忽略。
}

参考资料

  • DOM 方法
Last modified: Monday, 13 January 2025, 3:09 PM