美文网首页
querySelectorAll与getElementByTag

querySelectorAll与getElementByTag

作者: O无为学长O | 来源:发表于2020-12-14 06:50 被阅读0次

这两个方法都是用来获取元素的DOM方法,不同的是 querySelectorAll 方法返回的是一个 NodeList 节点列表,而 getElementByTagName 方法返回的是一个 HTMLCollection 集合。

两个方法的区别就在于 NodeList 与 HTMLCollection 的区别。

NodeList 是一个静态对象,从捕获到这个对象开始,里面的元素就是固定不变的。
HTMLCollection 是一个动态集合,里面的元素是动态变化的。

这么说可能有些人会一头雾水,举例说明就一目了然了,上代码:

<ul id="demo">
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>
<script>
  var ul = document.getElementById('demo');
  var li1 = ul.getElementsByTagName('li');
  var li2 = ul.querySelectorAll('li');

  var li3 = document.createElement('li');  
  ul.appendChild(li3);

  console.log(li1.length, li2.length); // 5, 4

  var li4 = document.createElement('li');  
  ul.appendChild(li4);

  console.log(li1.length, li2.length); // 6, 4
</script>

从上面的例子可以看到,querySelectorAll 获取到的是到这个方法执行为止之前的元素,之后即使再有元素变化,li2中始终只有之前的4个元素。而getElementsByTagName则不同,li1里面的元素数量是动态变化的,会随着实际元素数量的变化而实时更新。

以上就是这两个方法的区别,querySelectorAll 方法应该是借鉴jquery的选择器而产生的,上面例子中,将 querySelectorAll 方法换成jquery选择器,会得到相同的结果。

相关文章

网友评论

      本文标题:querySelectorAll与getElementByTag

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