ZetCode

JavaScript querySelectorAll

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 querySelectorAll 方法。这个强大的方法允许开发人员使用 CSS 选择器来选择多个 DOM 元素,从而在元素选择方面提供了灵活性。

基本定义

querySelectorAll 方法返回一个静态 NodeList,代表与指定选择器组匹配的元素列表。与 getElementById 不同,它可以一次选择多个元素。

此方法在 document 对象和单个元素上都可用。它接受任何有效的 CSS 选择器作为其参数,使其在 DOM 操作任务中具有极高的通用性。

基本 querySelectorAll

此示例演示了如何选择具有特定类名的所有元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Basic querySelectorAll</title>
</head>
<body>

<p class="note">First note</p>
<p class="note">Second note</p>
<p class="note">Third note</p>

<script>
    const notes = document.querySelectorAll('.note');
    notes.forEach(note => {
        console.log(note.textContent);
    });
</script>

</body>
</html>

在这个基本示例中,我们有三个类名为“note”的段落元素。JavaScript 代码使用 querySelectorAll 选择所有这些元素,并将它们的文本内容记录到控制台。

该方法返回一个 NodeList,它是一个类数组对象,可以使用 forEach 进行迭代。这展示了 querySelectorAll 用于一次访问多个元素的基本用法。

选择多个元素类型

此示例显示了如何通过一次调用选择不同类型的元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Multiple Element Types</title>
</head>
<body>

<h2>Section Title</h2>
<p class="intro">Introduction text</p>
<div id="content">Main content here</div>

<script>
    const elements = document.querySelectorAll('h2, .intro, #content');
    elements.forEach(el => {
        el.style.color = 'blue';
    });
</script>

</body>
</html>

在这里,我们通过一次 querySelectorAll 调用选择一个 h2 元素、一个类名为“intro”的元素以及一个 ID 为“content”的元素。然后我们将它们的文本颜色更改为蓝色。

这表明 querySelectorAll 可以接受多个由逗号分隔的选择器,类似于 CSS 选择器语法。返回的 NodeList 包含文档顺序中的所有匹配元素。

嵌套元素选择

此示例演示了在特定容器内选择元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Nested Selection</title>
</head>
<body>

<div id="container">
    <p>First paragraph</p>
    <p>Second paragraph</p>
</div>
<p>Outside paragraph</p>

<script>
    const container = document.getElementById('container');
    const innerParagraphs = container.querySelectorAll('p');
    
    innerParagraphs.forEach(p => {
        p.style.fontWeight = 'bold';
    });
</script>

</body>
</html>

在此示例中,我们首先选择一个容器 div,然后在该元素上使用 querySelectorAll 来查找其中的所有段落元素。我们使这些段落加粗,同时保持外部段落不变。

这表明 querySelectorAll 可以在特定元素上调用,以仅在其后代中进行搜索。这种范围搜索在基于组件的开发中尤其有用。

属性选择器

此示例展示了如何将属性选择器与 querySelectorAll 一起使用。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Attribute Selectors</title>
</head>
<body>

<input type="text" placeholder="Username">
<input type="password" placeholder="Password">
<input type="submit" value="Login">

<script>
    const textInputs = document.querySelectorAll('input[type="text"]');
    textInputs.forEach(input => {
        input.style.border = '2px solid green';
    });
</script>

</body>
</html>

在这里,我们使用属性选择器选择所有 type="text" 的 input 元素。然后,我们为这些特定的输入字段添加绿色边框,而使其他字段不受影响。

这展示了 querySelectorAll 的 CSS 样式属性选择器的强大功能。您可以使用任何 CSS 属性选择器模式,包括部分匹配,例如 [name^="user"] 用于以“user”开头的名称。

复杂选择器

此示例演示了如何将复杂的 CSS 选择器与 querySelectorAll 一起使用。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Complex Selectors</title>
</head>
<body>

<ul class="menu">
    <li>Home</li>
    <li class="active">Products</li>
    <li>Services</li>
    <li>Contact</li>
</ul>

<script>
    const items = document.querySelectorAll('ul.menu li:not(.active)');
    items.forEach(item => {
        item.style.opacity = '0.7';
    });
</script>

</body>
</html>

在此示例中,我们选择 ul.menu 中所有不具有“active”类的 li 元素。然后,我们降低它们的透明度,以使活动项更加突出。

这表明 querySelectorAll 可以处理复杂的 CSS 选择器,包括组合器、伪类和否定。选择器引擎支持几乎所有的 CSS3 选择器语法,以实现强大的元素选择。

来源

MDN querySelectorAll 文档

在本文中,我们展示了如何在 JavaScript 中使用 querySelectorAll。此方法对于现代 DOM 操作和 Web 开发中的元素选择至关重要,并提供了 CSS 选择器的灵活性。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出 所有 JS DOM 教程