document.getElementById和docuement.querySelector的区别
来源:互联网 发布:java递归求n的阶乘 编辑:程序博客网 时间:2024/06/06 10:49
习惯了用jQ查找元素,有时候我们不妨试试js原生的DOM选择符,getElementById()、getElementsByTagName()、querySelector()、querySelectorAll()。说不定一不小心就发现彩蛋了。
那么我们来说说上面那几个方法。
"querySelector 属于 W3C 中的 Selectors API 规范 。而 getElementsBy 系列则属于 W3C 的 DOM 规范"
---------------请忽略上面那句话----------------
还不如来点实际的。
1、区别
getXXXByXXX 获取的是动态集合,querySelector获取的是静态集合。
简单的说就是,动态就是选出的元素会随文档改变,静态的不会,取出来之后就和文档的改变无关了。
先看看一个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ul>
<li>aaa</li>
<li>ddd</li>
<li>ccc</li>
</ul>
//demo1
var
ul = document.getElementsByTagName(
'ul'
)[0],
lis = ul.getElementsByTagName(
"li"
);
for
(
var
i = 0; i < lis.length ; i++){
ul.appendChild(document.createElement(
"li"
));
}
console.log( lis.length);
//6
//demo2
var
ul = document.querySelectorAll(
'ul'
),
lis = ul.querySelectorAll(
"li"
);
for
(
var
i = 0; i < lis.length ; i++){
ul.appendChild(document.createElement(
"li"
));
}
console.log( lis.length);
//3
Demo1 中的 lis 是一个动态的 Node List, 每一次调用 lis 都会重新对文档进行查询,导致无限循环的问题。
2、性能
这里就不多讲了,大家可以参考:
https://jsperf.com/getelementsby-vs-queryselectorall/7
3、querySelector和querySelectorAll()
querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。
4、总结
如果只要一次查找就可得到元素时,首选getXXXByXXX ;
如果需要经过多级查找,才能得到元素时,首选querySelector;
阅读全文
0 0
- document.getElementById和docuement.querySelector的区别
- document.getElementsByName和document.getElementById的区别
- document.body 和 docuement.documentElement
- document.getelementbyid('id') 和 $('#id')的区别
- $("#id") 和 document.getElementById('id')的区别
- jquery $() 和document.getElementById() 区别
- document.querySelectorAl和document.querySelector的区别及其使用的封装
- getElementByID和getElementsByName和getElementsByTagName和document.all的区别
- getElementByID和getElementsByName和getElementsByTagName和document.all的区别
- document.getelementById 与 document.getelementByname 的区别
- document.getelementbyid().value与document.getElementById().innerHTML的区别
- jQuery的$("#id")和document.getElementById("id")的区别
- Jquery中$(”#id”)和document.getElementById(”id”)的区别
- document.getElementById('myframe')和window.frames[i]的区别
- jquery $("#id") 和document.getElementById("id")的区别
- document.getElementsByName()与 document.getElementById()、 document.documentElement.getElementsByTagName的区别
- document.getElementsByName()与 document.getElementById()、document.getElementsByTagName()的区别
- document.getElementById的一些细微区别
- 微服务(四)--dao层一
- 【C#编程最佳实践 六】数据库操作相关实践
- PostMessage和PostThreadMessage区别
- 大话项目管理工具之Maven篇
- 数据结构与算法_选择排序
- document.getElementById和docuement.querySelector的区别
- 不可滑动的 Listview(NoScrollListView)
- pyspark之MLlib学习【加载和转换数据】(1)
- android Path.setFillType(Path.FillType ft) 设置填充方式
- A and B and Chess 519A
- SpringCloud系列:服务注册与发现、负责均衡、hystrix服务降级的实现
- leetcode 498. Diagonal Traverse 矩阵对角遍历
- 如何安装3.6版本的scikit-learn(windows 7 64bit)
- Linux-SSH:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法