当前位置: 首页 > news >正文

JavaScript querySelector()、querySelectorAll() CSS选择器解析(DOM元素选择)

文章目录

  • 基于querySelector系列方法的CSS选择器深度解析
    • 一、方法概述
    • 二、基础选择器类型
      • 1. 类型选择器
      • 2. ID选择器
      • 3. 类选择器
      • 4. 属性选择器
    • 三、组合选择器
      • 1. 后代组合器
      • 2. 子元素组合器
      • 3. 相邻兄弟组合器
      • 4. 通用兄弟组合器
    • 四、伪类与伪元素
      • 1. 结构伪类
      • 2. 状态伪类
      • 3. 内容伪类
      • 4. 伪元素
    • 五、高级选择技巧
      • 1. 多重选择
      • 2. 转义特殊字符
      • 3. 动态选择器拼接
    • 六、DOM操作实践示例
      • 1. 动态样式修改
      • 2. 批量元素操作
      • 3. 表单验证增强
    • 七、性能注意事项
    • 八、浏览器支持情况

基于querySelector系列方法的CSS选择器深度解析

一、方法概述

const element = document.querySelector(selector);
const elements = document.querySelectorAll(selector);
  • querySelector()返回匹配的第一个元素
  • querySelectorAll()返回NodeList集合
  • 参数接受标准CSS选择器语法
  • 支持在任意Element节点上调用

二、基础选择器类型

1. 类型选择器

document.querySelector('div') // 匹配第一个<div>
document.querySelectorAll('p') // 所有<p>元素

2. ID选择器

document.querySelector('#main-header') // ID需唯一
document.querySelector('div#content') // 带标签限制

3. 类选择器

document.querySelectorAll('.active') // 所有含active类的元素
document.querySelector('button.primary') // 带标签限制

4. 属性选择器

/* 完整匹配 */
[type="submit"]/* 包含匹配 */
[class*="btn"]/* 开头匹配 */
[href^="https"]/* 结尾匹配 */
[src$=".png"]/* 空格分隔包含 */
[lang~="en"]

示例:

document.querySelector('a[target="_blank"]') // 新窗口打开的链接
document.querySelectorAll('input[type^="date"]') // 日期相关输入框

三、组合选择器

1. 后代组合器

document.querySelectorAll('nav ul li') // 所有nav下的ul中的li

2. 子元素组合器

document.querySelector('div > .content') // 直接子元素

3. 相邻兄弟组合器

document.querySelector('h2 + p') // 紧接在h2后的p元素

4. 通用兄弟组合器

document.querySelectorAll('h3 ~ div') // h3之后的所有同级div

四、伪类与伪元素

1. 结构伪类

document.querySelector('li:nth-child(2n+1)') // 奇数行列表项
document.querySelectorAll('tr:nth-of-type(even)') // 偶数行表格行

2. 状态伪类

document.querySelector('input:disabled') // 禁用输入框
document.querySelectorAll('a:visited') // 已访问链接

3. 内容伪类

document.querySelector('p:empty') // 无内容的段落
document.querySelector('div:has(> img)') // 包含直接子图片的div

4. 伪元素

document.querySelector('p::first-line') // 无效选择,伪元素不可匹配

五、高级选择技巧

1. 多重选择

document.querySelectorAll('h1, h2, h3') // 所有标题元素

2. 转义特殊字符

document.querySelector('#user\\.name') // 转义特殊字符

3. 动态选择器拼接

const type = 'success';
document.querySelector(`.alert-${type}`) // 模板字符串拼接

六、DOM操作实践示例

1. 动态样式修改

document.querySelector('.chart-bar:nth-child(3)').style.backgroundColor = '#ff4757';

2. 批量元素操作

document.querySelectorAll('.data-table tr:not(:first-child)').forEach(row => {row.classList.add('highlight');});

3. 表单验证增强

document.querySelectorAll('input:invalid').forEach(input => {input.parentElement.classList.add('error');
});

七、性能注意事项

  1. 选择器复杂度控制:避免超过三层嵌套
  2. 作用域优化:优先在最近父元素查询
  3. 缓存结果:重复使用查询结果
  4. 伪实时性:NodeList不会自动更新
  5. 特殊字符处理:需正确转义CSS保留字符

八、浏览器支持情况

选择器类型支持版本
:focus-withinChrome 64+
:has()Chrome 105+
:is()Chrome 88+
:where()Chrome 88+

通过合理运用CSS选择器语法,可以实现精确的DOM元素定位。建议优先使用简单选择器组合,在复杂场景下可结合现代CSS伪类保持代码可维护性。

http://www.lryc.cn/news/542074.html

相关文章:

  • Linux系统中处理子进程的终止问题
  • Docker 不再难懂:快速掌握容器命令与架构原理
  • 取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票
  • 力扣-贪心-763 划分字母区间
  • 【Redis 原理】网络模型
  • cpp中的继承
  • DeepSeek全栈接入指南:从零到生产环境的深度实践
  • CSS 真的会阻塞文档解析吗?
  • 大模型的UI自动化:Cline 使用Playwright MCP Server完成测试
  • 碰撞检测 | 图解凸多边形分离轴定理(附ROS C++可视化)
  • Python 基本数据类型
  • 突破“第一崇拜“:五维心理重构之路
  • KubeKey一键安装部署k8s集群和KubeSphere详细教程
  • UE5网络通信架构解析
  • 实验3 知识表示与推理
  • 基于Springboot银行信用卡额度管理系统【附源码】
  • 达梦数据库学习笔记@1
  • 图像处理篇---图像处理中常见参数
  • AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践
  • 50周学习go语言:第1周 环境搭建
  • 4. MySQL 逻辑架构说明
  • 《AI与NLP:开启元宇宙社交互动新纪元》
  • 面对STM32的庞大体系,如何避免迷失在细节中?
  • ragflow-RAPTOR到底是什么?请通俗的解释!
  • Linux系统移植之Uboot启动流程
  • 【Open X-Embodiment】简单数据下载与预处理
  • 【第四节】C++设计模式(创建型模式)-Builder(建造者)模式
  • 排查JVM的一些命令
  • uni-app(位置1)
  • 某手sig3-ios算法 Chomper黑盒调用