美文网首页
querySelector 相比 getElementsBy

querySelector 相比 getElementsBy

作者: Sccong | 来源:发表于2017-03-01 23:31 被阅读0次
  • 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选择器多种选择器供你使用)

相关文章

网友评论

      本文标题:querySelector 相比 getElementsBy

      本文链接:https://www.haomeiwen.com/subject/qtacgttx.html