zoukankan      html  css  js  c++  java
  • getElementById和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;

    一切的失败都只因为当事人能力的不足
  • 相关阅读:
    HDOJ1004
    HDOJ1001
    HDOJ1000
    HDOJ1003
    HDOJ1005
    新手如何正确使用CLion之输出hello world
    hihoCoder#1032 : 最长回文子串
    P3805 【模版】manacher算法(manacher)
    P1198 [JSOI2008]最大数(单调栈)
    P1351 联合权值
  • 原文地址:https://www.cnblogs.com/kakutian/p/6972939.html
Copyright © 2011-2022 走看看