关于JS中getElementsByTagName与querySelectorAll的区别

关于 getElementsByTagName 和 querySelectorAll 的一些区别
其实两个获取元素的基本用法是一样子的
(浏览器:Google)

<script>
var aDiv = document.getElementByTagName('div')
var aDiv = document.querySelectorAll('div')
</script>

这两种写法看起来是一样子的,用法也应该差不多,但是却有一个区别:

<script>
var aDiv = document.getElementByTagName('div')
for( var i = 0; i < 10; i++ ){
   document.body.innerHTML += '<div>' + i + '</div>'
}
for( var i = 0; i < oDiv.length; i++ ) {
   aDiv[i].style.left =10 + 60*i + 'px'
   aDiv[i].style.top = 10 + 'px'
}
</script>

在使用 getElementByTagName 时,没有问题。


图1

然而在使用 querySelectorAll 时,结果是这样的

<script>
var aDiv = document.querySelectorAll('div')
for( var i = 0; i < 10; i++ ){
   document.body.innerHTML += '<div>' + i + '</div>'
}
for( var i = 0; i < oDiv.length; i++ ) {
   aDiv[i].style.left =10 + 60*i + 'px'
   aDiv[i].style.top = 10 + 'px'
}
</script>
图2

再来看一个例子

<style>
    ul li{ list-style: none; width: 50px; height: 50px; background: #000; display: block; margin-bottom: 10px; }
   .active{ background: #fc7; }
</style>
<script>
    window.onload = function(){
      var oUl = document.getElementsByTagName("ul")[0]
      var aLi = oUl.getElementsByTagName("li")
      for (let i = 0; i < 5; i++) {
        oUl.innerHTML += '<li></li>'
      }
      aLi[0].className = 'active'
    }
</script>
<body>
  <div>
    <ul></ul>
  </div>
</body>

这里我们想给 JS 里生成的第一个 li 添加一个名为 active 的 class , 如果用 getElementsByTagName 方法的话,可以正常操作


图三

但是如果用 querySelectorAll 方法时,却没有成功


图四

以上

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,288评论 25 708
  • JavaScript 快速入门 浏览器浏览器对象操作 DOM插入 DOM删除 DOM 操作表单获取值设置值HTML...
    染微言阅读 1,680评论 0 5
  • 一周练五张。
    子言喜阳阅读 156评论 0 0
  • 阅读前,请务必戴上自己的耳机。这是一篇有声音的文章。你所见到世界可能只是冰山一角,在网易云中更是如此,通往新世界的...
    梦有寒桑阅读 1,132评论 1 1
  • 在讲类的生命周期前先说一说我对Java 虚拟机的整体理解: JVM是对Java 类、对象进行统一管理,主要的流程是...
    Jk_zhuang阅读 545评论 0 1