getElementById和querySelector方法的区别
2017-05-03 00:39
337 查看
习惯了用jQ查找元素,有时候我们不妨试试js原生的DOM选择符,getElementById()、getElementsByTagName()、querySelector()、querySelectorAll()。说不定一不小心就发现彩蛋了。
那么我们来说说上面那几个方法。
"querySelector 属于 W3C 中的 Selectors API 规范 。而 getElementsBy 系列则属于 W3C 的 DOM 规范"
---------------请忽略上面那句话----------------
还不如来点实际的。
1、区别
getXXXByXXX 获取的是动态集合,querySelector获取的是静态集合。
简单的说就是,动态就是选出的元素会随文档改变,静态的不会,取出来之后就和文档的改变无关了。
先看看一个例子:
Demo1 中的 lis 是一个动态的 Node List, 每一次调用 lis 都会重新对文档进行查询,导致无限循环的问题。
2、性能
这里就不多讲了,大家可以参考:
https://jsperf.com/getelementsby-vs-queryselectorall/7
3、querySelector和querySelectorAll()
querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。
4、总结
如果只要一次查找就可得到元素时,首选getXXXByXXX ;
如果需要经过多级查找,才能得到元素时,首选querySelector;
那么我们来说说上面那几个方法。
"querySelector 属于 W3C 中的 Selectors API 规范 。而 getElementsBy 系列则属于 W3C 的 DOM 规范"
---------------请忽略上面那句话----------------
还不如来点实际的。
1、区别
getXXXByXXX 获取的是动态集合,querySelector获取的是静态集合。
简单的说就是,动态就是选出的元素会随文档改变,静态的不会,取出来之后就和文档的改变无关了。
先看看一个例子:
<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;
相关文章推荐
- getElementById和querySelector方法的区别
- getElementById和querySelector方法的区别之处
- javascript querySelector和getElementById通过id获取元素的区别
- document 方法:getElementsByName()与getElementById()、getElementsByTagName()的区别
- getElementByName()方法和getter属性,及与getElementById()的区别
- document.getElementById方法在Firefox与IE中的区别
- html dom中要查找希望操作的元素使用的方法:getElementById()和getElementsByTagName()的区别
- jquery中的$("#id")与document.getElementById("id")的区别 及html()方法
- document.getElementById方法在Firefox与IE中的区别。
- document.getElementById("").style和$("").css(name,value)方法的区别?
- JS中$()方法与document.getElementById('id')的区别
- 常用的4种获取元素方法的区别, getElementById, ..ClassName, ..TagName, .Name
- querySelector和getElementById通过id获取元素的区别
- 【JavaScript】document.getElementById方法在Firefox与IE中的区别
- firefox和ie中getElementById方法的区别
- document.getElementById方法在Firefox与IE中的区别
- 获取表单对象,得三种方法getElementById(), getElementsByName(), and getElementsByTagName() 和用法
- getElementById 和 getElementByName的区别
- getElementsByName和getElementByID的区别
- 不区分不行的弱类型脚本中的有类型对象-iFrame通过document.getElementById方法访问和document.nameIframe的差异