querySelector 相比 getElementsBy

  • getElementsBy 返回的是一个HTML Collection,querySelectorAll返回一个Node list,主要不同在于HTMLCollection是元素集合而NodeList是节点集合(即可以包含元素,也可以包含文本节点)。

  • getElementsBy 返回静态的,querySelector则返回动态的

querySelector

<ul>
   <li>111</li>
   <li>222</li>
   <li>333</li>
 </ul>
var ul=document.querySelector('ul'); 
var list=ul.querySelectorAll('li');
for(var i=0;i<list.length;i++){ 
            ul.appendChild(document.createElement('li'));
 }//这个时候就创建了3个新的li,添加在ul列表上。 
console.log(list.length) //输出的结果仍然是3,不是此时li的数量6

getElement

<ul>
   <li>111</li>
   <li>222</li>
   <li>333</li>
 </ul>
var ul=document.getElementsByTagName('ul')[0]; 
var list=ul.getElementsByTagName('li');
for(var i=0;i<list.length;i++){ 
            ul.appendChild(document.createElement('li'));
 }//这个时候就创建了3个新的li,添加在ul列表上。 
console.log(list.length)//此时输出的结果就是3+5=8
  • 性能相差大,getElement要快得多
console.time('querySelectorAll');
for (var i = 0; i < 10000; i++) {
  document.querySelectorAll(".sfj");
}
console.timeEnd('querySelectorAll');
-> VM89:5 querySelectorAll: 6.911ms
->undefined
console.time('getElements');
for (var i = 0; i < 10000; i++) {
  document.getElementsByClassName(".sfj")[0];
}
console.timeEnd('getElements');
->VM114:5 getElements: 2.775ms
->undefined
  • 参数类型
    querySelectorAll 方法接收的参数是一个 CSS 选择符。而 getElementsBy 系列接收的参数只能是单一的className、tagName 和 name。

总结:如果不是多次getElement的话,尽量使用getElement,反之则可以使用querySelector(毕竟css3选择器多种选择器供你使用)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答 一、dom对象的innerText和innerHTML有什么区别? innerTextinnerText是一...
    婷楼沐熙阅读 420评论 0 0
  • 1.dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性。将写入的内容...
    candy252324阅读 557评论 0 0
  • 问答题 dom对象的innerText和innerHTML有什么区别?答:innerText和innerHTML都...
    饥人谷_桶饭阅读 517评论 0 0
  • DOM0级和DOM2级在事件监听使用方式上有什么区别? DOM0级事件监听:用JavaScript指定事件处理程序...
    LeeoZz阅读 387评论 0 1
  • 今天终于又一次见到了泓默,走进她的梦想花园,还特别荣幸尝到唐贝贝的厨艺。 餐桌上,听唐贝贝柔柔的述说学习的事儿,不...
    吹西阅读 386评论 2 0