JavaScript中的querySelector()方法是什么,它是如何工作的?

在JavaScript中,有时您需要访问HTML元素。querySelector方法是一个Web API,它选择与传入的指定CSS选择器匹配的第一个元素。

但是,更详细地说,这是如何工作的呢?在本文中,我们将看一些如何使用querySelector方法以及querySelectorAll方法的示例。

(本文内容参考:java567.com)

querySelector()方法的基本语法

querySelector方法在document对象上调用,并接受一个参数,表示要选择的元素的CSS选择器。

document.querySelector(selector);

如果选择器在文档中匹配到一个元素,则该方法将返回第一个匹配的元素。如果没有匹配项,则该方法将返回null。

如何使用querySelector()方法与类型选择器

CSS中的类型选择器是指HTML元素的名称。例如,button、div、p等。

在第一个示例中,我们在HTML文档中有一个button元素。

<button>Show Alert</button>

如果我们想在JavaScript文件中访问该元素,我们可以像这样使用querySelector方法:

const buttonElement = document.querySelector("button");

这行代码选择页面上看到的第一个按钮,并将结果赋给一个名为buttonElement的const变量。

如果我们将这个buttonElement变量记录到控制台,输出将会是:

console.log(buttonElement);

在这里插入图片描述

我们可以使用buttonElement变量,并为按钮添加事件监听器,以便在单击按钮时显示警报。

buttonElement.addEventListener("click", () => {alert("Button was clicked!");
});

这是完整的代码和交互示例。

如何使用querySelector()方法与类选择器

CSS中的类选择器是指用于HTML元素的类名。例如.container、.button等。

假设我们想要构建一个纸牌游戏,并且希望在单击按钮时隐藏/显示游戏规则。我们可以使用querySelector方法选择按钮和规则容器。

这是初始HTML:

<h1>Let's play solitaire!</h1>
<main><button class="rules-btn">Show Rules</button><section class="rules-container"><h2>Rules to the game</h2><ul><li>There are 7 columns of cards</li><li>First column has 1 card, second has 2, third has 3, and so on</li><li>First card in each column is face up, rest are face down</li><li>Move cards to build 4 stacks of cards in ascending order</li><li>Start with aces and build up to kings</li><li>Move cards by dragging and dropping</li></ul></section>
</main>

在JavaScript文件中,我们可以使用querySelector方法选择规则按钮和规则容器。

const rulesBtn = document.querySelector(".rules-btn");
const rulesContainer = document.querySelector(".rules-container");

然后,我们可以为rulesBtn变量添加事件监听器,以在单击按钮时显示/隐藏规则容器。我们使用classList属性在规则容器元素上切换类“show”。

rulesBtn.addEventListener("click", () => {rulesContainer.classList.toggle("show");
});

这是一个交互式示例,在这里您可以看到单击按钮时规则容器被显示和隐藏。

尽管这里的切换是有效的,但代码中有一个小bug。默认情况下,规则将被隐藏,按钮文本显示为“显示规则”。当显示规则时,按钮文本应更改为“隐藏规则”,但现在没有。

在事件监听器内部,我们可以根据规则容器的状态更新按钮的文本内容,当规则显示时显示“隐藏规则”,当规则隐藏时显示“显示规则”。

rulesBtn.textContent = rulesContainer.classList.contains("show")? "Hide Rules": "Show Rules";

现在按钮文本将根据规则容器的状态更改。这是完整的JavaScript代码:

const rulesBtn = document.querySelector(".rules-btn");
const rulesContainer = document.querySelector(".rules-container");rulesBtn.addEventListener("click", () => {rulesContainer.classList.toggle("show");rulesBtn.textContent = rulesContainer.classList.contains("show")? "Hide Rules": "Show Rules";
});

这是一个交互式示例,其中包含更新后的JavaScript代码。

如何使用querySelectorAll()方法

querySelectorAll方法与querySelector方法类似,但不是返回第一个匹配的元素,而是返回所有匹配元素的NodeList。NodeList是一个类似数组的对象,包含所有与指定选择器匹配的元素。

在这个例子中,我们有一个无序的运动列表,我们想为每个列表项生成随机背景颜色。

这是初始HTML:

<button class="btn">Generate Random Background Colors</button>
<ul class="sports-list"><li>Football</li><li>Basketball</li><li>Tennis</li><li>Golf</li><li>Swimming</li>
</ul>

要选择无序列表中的所有列表项,我们可以像这样使用querySelectorAll方法:

const sportsList = document.querySelectorAll(".sports-list li");

如果我们将sportsList变量记录到控制台,输出将会是:

console.log(sportsList);

在这里插入图片描述

然后,我们需要使用querySelector方法选择按钮。

const randomColorBtn = document.querySelector(".btn");

然后,我们可以创建一个随机颜色列表。

const lightColorsArr = ["#FFDAB9","#FFE4B5","#FFFFE0",// 省略部分代码
];

每当用户单击按钮时,我们希望洗牌颜色列表,并从数组中选择5种随机浅色。我们可以使用Fisher-Yates洗牌算法来洗牌数组,这是JavaScript中常见的一种方法。

function shuffleArray(arr) {let currentIndex = arr.length;let randomIndex;while (currentIndex !== 0) {randomIndex = Math.floor(Math.random() * currentIndex);currentIndex--;[arr[currentIndex], arr[randomIndex]] = [arr[randomIndex],arr[currentIndex],];}return arr;
}

然后我们可以为按钮添加事件监听器并洗牌数组。

randomColorBtn.addEventListener("click", () => {const shuffledColors = shuffleArray(lightColorsArr);
});

对于每个列表项,我们可以将背景颜色设置为洗牌数组中的随机颜色。

sportsList.forEach((list, index) => {list.style.backgroundColor = shuffledColors[index];
});

这是完整的代码:

const sportsList = document.querySelectorAll(".sports-list li");
const randomColorBtn = document.querySelector(".btn");console.log(sportsList);const lightColorsArr = ["#FFDAB9","#FFE4B5","#FFFFE0",// 省略部分代码
];function shuffleArray(arr) {let currentIndex = arr.length;let randomIndex;while (currentIndex !== 0) {randomIndex = Math.floor(Math.random() * currentIndex);currentIndex--;[arr[currentIndex], arr[randomIndex]] = [arr[randomIndex],arr[currentIndex],];}return arr;
}randomColorBtn.addEventListener("click", () => {const shuffledColors = shuffleArray(lightColorsArr);sportsList.forEach((list, index) => {list.style.backgroundColor = shuffledColors[index];});
});

这是一个交互式示例,包含完整的JavaScript代码。单击按钮,您会看到列表项更改为随机背景颜色。

结论

querySelector和querySelectorAll方法是有用的Web API,允许您访问DOM中的元素。您可以使用这些方法通过类型、类、ID、属性、伪类和伪元素选择器来选择元素。

我建议您尝试使用这些方法,并在您自己的项目中看看您能做些什么。

我希望您找到本文有用和信息丰富。祝编码愉快!

(本文内容参考:java567.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「企业应用架构」应用程序架构的当前趋势

本文有些不是最最新的&#xff0c;但是方法和思路也有借鉴意义&#xff0c;稍后会介绍Gantner的最新应用架构趋势。 应用架构概述 随着各种力量&#xff08;云、移动、社交和大数据&#xff09;的相互联系不断涌现&#xff0c;不利用这些力量的组织在未来将面临严重的业务劣势。…

linux安装mysql8且初始化表名忽略大小写

mysql8下载地址 MySQL8.0安装步骤 1、把安装包上传到linux系统&#xff0c;解压、重命名并移动到/usr/local/目录&#xff1a; cd ~ tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.32-linux-glibc2.12-x86_64/ mysql80/ mv mysql80/ /usr/local/2、在M…

Leetcode-1572. 矩阵对角线元素的和

题目&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线…

Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现

0x01 产品简介 Panalog是一款日志审计系统,方便用户统一集中监控、管理在网的海量设备。 0x02 漏洞概述 Panalog日志审计系统 libres_syn_delete.php接口处存在远程命令执行漏洞,攻击者可执行任意命令,接管服务器权限。 0x03 影响范围 version <= MARS r10p1Free 0…

寒假学习记录17:包管理器(包管理工具)

概念 包&#xff08;package&#xff09; 包含元数据的库&#xff0c;这些元数据包括&#xff1a;名称&#xff0c;描述&#xff0c;git主页&#xff0c;许可证协议&#xff0c;作者&#xff0c;依赖..... 库&#xff08;library&#xff0c;简称lib&#xff09; 以一个或多个模…

【论文精读】BEiT

摘要 提出一种掩码图像建模任务&#xff0c;以自监督方式预训练视觉transformer。对BEIT进行了预训练&#xff0c;并对下游任务进行微调实验&#xff0c;如图像分类和语义分割。发现自监督BEIT的自注意力机制可以学会区分语义区域和对象边界。 框架 给定输入图像 x x x&#…

[word] word保存了但是再打开就没有了怎么办 #职场发展#其他

word保存了但是再打开就没有了怎么办 word保存了但是再打开就没有了怎么办&#xff1f; 一些朋友反映常常找不到自己保存在电脑中的Word的文档&#xff0c;不知道是怎么回事。如果是突然消失的&#xff0c;其实情况还是有很多种&#xff0c;相信大家也有一定的了解。在这里&a…

jmeter-07jmeter与数据库关联

文章目录 一、JDBC驱动下载二、连接数据库三、写对应的SQL四、进行断言处理方法一:使用beanshell进行断言方法二:使用json进行断言四、为什么数据库查询的结果赋值给了**sql_name**,但是在断言的时候使用的是**sql_name_1**呢?一、JDBC驱动下载 JDBC驱动下载链接 1)5.x.x…

MySQL5.7升级到MySQL8.0的最佳实践分享

一、前言 事出必有因&#xff0c;在这个月的某个项目中&#xff0c;我们面临了一项重要任务&#xff0c;即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞&#xff0c;客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈&#xff0c;但为了满足客户的要求…

【Linux 04】编辑器 vim 详细介绍

文章目录 &#x1f308; Ⅰ 基本概念&#x1f308; Ⅱ 基本操作1. 进入 / 退出 vim2. vim 模式切换 &#x1f308; 命令模式1. 光标的移动2. 复制与粘贴3. 剪切与删除4. 撤销与恢复 &#x1f308; Ⅲ 底行模式&#x1f308; Ⅳ 异常退出 &#x1f308; Ⅰ 基本概念 vim 是一种…

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…

第24讲投票管理实现

投票管理实现 后端&#xff1a; package com.java1234.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.java1234.entity.*; import com.java1234.service.…