美文网首页
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