js getElementsByClassName与querySelector querySelectorAll的区别

关于它们的区别,我写了个简单的小例子,代码如下

代码如图:

<body>
	<ul>
		<li class="items-li">测试数据1</li>
		<li class="items-li">测试数据2</li>
		<li class="items-li">测试数据3</li>
		<li class="items-li">测试数据4</li>
		<li class="items-li">测试数据5</li>
		<li class="items-li">测试数据6</li>
		<li class="items-li">测试数据7</li>
		<li class="items-li">测试数据8</li>
	</ul>
	<script type="text/javascript">
		console.log("输出getElementsByClassName得到的结果");
		var byClass=document.getElementsByClassName("items-li");
		console.log(byClass);
		console.log("输出querySelectorAll得到的结果");
		var selectorAll=document.querySelectorAll(".items-li");
		console.log(selectorAll);
		console.log("输出querySelector得到的结果");
		var selector=document.querySelector(".items-li");
		console.log(selector);
	</script>
</body>

效果图:

090048_r2sV_3680343.png

由此可知document.querySelector()方法反会的是一组数据中的第一条数据,而document.getElementsByClassName()与document.querySelectorAll()方法返回的都是数组

转载于:https://my.oschina.net/u/3680343/blog/1562959

### querySelector getElementsByClassName 的主要区别 #### 返回值类型 `querySelector` 方法返回的是第一个匹配指定 CSS 选择器的单个元素节点,而 `getElementsByClassName` 则返回一个动态的 NodeList,其中包含文档中所有具有指定类名的元素[^1]。 ```javascript // 使用 querySelector 获取单个元素 const firstBox = document.querySelector(".box"); // 使用 getElementsByClassName 获取多个元素 const allBoxes = document.getElementsByClassName("box"); ``` #### 动态更新特性 由 `getElementsByClassName` 返回的 NodeList 是动态的,这意味着如果 DOM 发生变化(例如新增或删除带有相同类名的元素),NodeList 将自动反映这些更改。然而,`querySelector` 只返回单一的静态引用,不会随着 DOM 的改变而更新。 #### 支持的选择器范围 `querySelector` 基于标准的 CSS 选择器语法工作,因此可以执行更加复杂的查询操作,比如伪类、后代选择器等。相比之下,`getElementsByClassName` 仅限于按类名查找元素[^3]。 ```javascript // 复杂选择器示例 const activeItem = document.querySelector(".list-item.active"); // 简单调用 const itemsByClass = document.getElementsByClassName("list-item"); ``` #### 浏览器兼容性 虽然两者都属于较新的 DOM API,但是需要注意的是,`querySelector` `querySelectorAll` 提供的功能更为强大,在现代浏览器中的应用也更加广泛。对于非常旧版的浏览器(如 IE8 或更低版本),可能需要考虑其对 HTML5 特性的支持情况[^2]。 --- ### 总结对比表 | 属性 | querySelector | getElementsByClassName | |-------------------|--------------------------------------|------------------------------------| | **返回值数量** | 单一的第一个匹配项 | 所有匹配项组成的列表 | | **数据结构** | 静态 Element 节点 | 动态 NodeList | | **灵活性/复杂度** | 支持完整的 CSS 选择器 | 仅基于类名 | | **性能影响** | 不随 DOM 更新 | 自动同步最新状态 | --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值