ZetCode

Document.querySelector 教程

最后修改: 2025 年 3 月 20 日

在本文中,我们将通过实际例子演示如何使用 querySelector 在 JavaScript 中选择 HTML 元素。

Document.querySelector

querySelector 方法是 Document 对象的一部分,它检索文档中与指定的 CSS 选择器匹配的第一个元素。 如果未找到匹配项,则返回 null

相比之下,querySelectorAll 返回一个静态的 NodeList,其中包含与给定选择器组匹配的所有元素。 此列表不会随文档更改而更新。

Document.querySelector 示例

以下示例说明了如何使用 querySelectorquerySelectorAll 动态地操作 HTML 元素。

index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document.querySelector</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.5.0/components/button.min.css">
<style>

body { margin: 3em }

.selected { background-color: #eee }

.container {
    display: grid;
    grid-template-columns: 100px 100px 100px 100px 100px;
    grid-template-rows: 50px;
    grid-column-gap:5px;
    margin-bottom: 1em;
}

div>div {
    border: 1px solid #ccc;
}

</style>
</head>
<body>

<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>

<button id="first" type="submit" class="ui grey button">First</button>
<button id="all" type="submit" class="ui brown button">All</button>
<button id="clear" type="submit" class="ui brown button">Clear</button>

<script src="main.js"></script>

</body>
</html>

此 HTML 文档包含一个容器内的五个带边框的 div 元素,它们被样式化为网格。 三个按钮触发对这些 div 的视觉更改。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.5.0/components/button.min.css">

我们使用 Semantic UI 框架来增强文档的外观,以获得一致的按钮样式。

.selected { background-color: #eee }

.selected 类将浅灰色背景应用于高亮的 div 元素。

.container {
    display: grid;
    grid-template-columns: 100px 100px 100px 100px 100px;
    grid-template-rows: 50px;
    grid-column-gap:5px;
    margin-bottom: 1em;
}

.container 类使用 CSS Grid 将五个 div 排列在单行中,具有相等的列宽和它们之间的小间隙。

div>div {
    border: 1px solid #ccc;
}

容器内的内部 div 具有浅灰色边框,以便清晰的视觉分隔。

<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>

五个空的 div 元素嵌套在一个具有 container 类的父 div 中。

<button id="first" type="submit" class="ui grey button">First</button>
<button id="all" type="submit" class="ui brown button">All</button>
<button id="clear" type="submit" class="ui brown button">Clear</button>

三个按钮控制 div 元素:“First”突出显示第一个 div,“All”突出显示所有 div,而“Clear”删除突出显示。 Semantic UI 样式增强了它们的外观。

<script src="main.js"></script>

JavaScript 逻辑驻留在外部 main.js 文件中,该文件链接在文档的末尾。

main.js
document.getElementById("first").onclick = (e) => {

  let tag = document.querySelector(".container div:first-child");

  tag.className = "selected";

};

document.getElementById("all").onclick = (e) => {

  let tags = document.querySelectorAll(".container div");

  tags.forEach( tag => {
      tag.className = "selected";
  });

};

document.getElementById("clear").onclick = (e) => {

  let tags = document.querySelectorAll(".container div");
  tags.forEach( tag => {
      tag.classList.remove("selected");
  });

};

main.js 文件定义了每个按钮的行为,使用 querySelectorquerySelectorAll 来操作 DOM。

document.getElementById("first").onclick = (e) => {

一个事件监听器使用 onclick 属性附加到“First”按钮,该属性通过 getElementById 选中。

let tag = document.querySelector(".container div:first-child");

querySelector 方法使用 :first-child 伪类,以第一个 div 为目标,该 div 位于 .container 内部。

tag.className = "selected";

selected 类被分配给目标 div,应用灰色背景。

let tags = document.querySelectorAll(".container div");

querySelectorAll 方法将 .container 内的所有 div 元素作为 NodeList 检索。

tags.forEach( tag => {
  tag.className = "selected";
});

使用 forEach,我们遍历 NodeList 并将 selected 类应用于每个 div 元素。

Selecting elements with Document.querySelector
图:使用 Document.querySelector 选择元素

此屏幕截图显示在单击“First”按钮后,第一个 div 以灰色背景突出显示,演示了该效果。

来源

文档:querySelector 方法

在本教程中,我们探讨了使用 querySelectorquerySelectorAll 选择和操作 HTML 元素的方法。

作者

我的名字是 Jan Bodnar,是一位经验丰富的充满激情的程序员。 自 2007 年以来,我写了 1,400 多篇文章和 8 本电子书,并积累了八年以上的教学经验。

查看 所有 JavaScript 教程。