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

querySelectorAll 和 getElementByClassName 的区别是啥

返回值类型​​

querySelectorAll​​

  • 返回一个 ​​静态的 NodeList​​(类数组对象),即使后续 DOM 变化也不会自动更新。
  • 需要通过索引(如 [0])或遍历(如 forEach)访问元素(现代浏览器支持 forEach,旧版可能需要 Array.from() 转换)。
const elements = document.querySelectorAll('.class');
elements.forEach(el => console.log(el));

getElementsByClassName​​

  • 返回一个 ​​动态的 HTMLCollection​​(类数组对象),会实时反映 DOM 的变化(增删元素时自动更新)。
  • 同样需要通过索引访问,且没有原生 forEach 方法(需先转为数组)。
const elements = document.getElementsByClassName('class');
Array.from(elements).forEach(el => console.log(el)); // 需转换

参数灵活性​​

querySelectorAll​​

  • 支持 ​​CSS 选择器​​,可以组合多种条件(如 .class > div:first-child)。
// 选择所有 class="box" 且父级是 nav 的元素
document.querySelectorAll('nav .box');

getElementsByClassName​​

  • 仅能通过 ​​类名​​ 选择元素,参数为字符串(多个类名需连写,如 ‘class1 class2’,但行为可能不符合预期)。
// 注意:这会选择同时有 class1 和 class2 的元素(类似 "class1 class2")
document.getElementsByClassName('class1 class2');

性能​​

​​getElementsByClassName​​

  • 通常更快,因为它是浏览器原生优化的 API,专门用于类名查询。
  • 适合频繁操作或简单类名查询。
    ​​### querySelectorAll​​
  • 需要解析 CSS 选择器,可能稍慢,但功能更强大。
  • 在复杂选择器场景下仍高效(现代浏览器优化良好)。

动态性​​

HTMLCollection(getElementsByClassName)是动态的,而 NodeList(querySelectorAll)是静态的。

// 动态示例
const liveCollection = document.getElementsByClassName('class');
const staticList = document.querySelectorAll('.class');// 添加新元素后:
document.body.appendChild(document.createElement('div')); // 假设新 div 有 class="class"
console.log(liveCollection.length); // 增加
console.log(staticList.length);     // 不变
http://www.dtcms.com/a/195546.html

相关文章:

  • 数据预处理-数据清洗(缺失值、重复值、异常值)
  • MySQL——十一、主从复制
  • Unity 批量将图片从默认类型改为Sprite类型
  • 【Linux网络】详解应用层http协议
  • 基于大数据的租房信息可视化系统的设计与实现【源码+文档+部署】
  • 深度学习中的归一化:提升模型性能的关键因素
  • 城市综合管廊监测与维护一体化解决方案
  • C++运算符重载练习
  • 【python编程从入门到到实践】第十章 文件和异常
  • 遥感图像非法采矿矿区识别分割数据集labelme格式1818张3类别
  • 人脸表情识别检测数据集VOC+YOLO格式9400张8类别
  • linux环境下 安装svn并且创建svn版本库详细教程
  • python中元组的操作
  • 149.WEB渗透测试-MySQL基础(四)
  • 三轴云台之智能分析与识别技术篇
  • 蒟蒻编程日志
  • 腾讯云代码助手CodeBuddy使用体验
  • 第八章 模板项目生成
  • Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)
  • SPL做量化---MTM(动量指数)
  • Linux!启动~
  • 大模型对比
  • Grafana分布统计:Heatmap面板
  • 计算机视觉----感兴趣区域(ROI)、非极大值抑制
  • 探究电阻分压的带负载能力
  • DeepEval:快速搭建 LLM 评估框架实战「喂饭教程」
  • 机器学习数据预处理回归预测中标准化和归一化
  • C语言单链表应用详解
  • 【程序员AI入门:模型】19.开源模型工程化全攻略:从选型部署到高效集成,LangChain与One-API双剑合璧
  • 【目标检测】RT-DETR