Skip to content
登录后刷题更便捷

ele.getElementsByClassName 和 ele.querySelectorAll 的区别?

难度:
  • element.getElementsByClassName 返回一个即时更新(动态的)HTMLCollection
  • element.querySelectorAll 返回一个非即时更新(静态的) NodeList

先说什么叫即时更新,(前者是动态的,改变 DOM 结构会同步,后者只会记录调用 api 时的结果,不懂可以看下面的例子)

html
<div id="parent">
  <p class="p">1</p>
  <p class="p">2</p>
  <p class="p">3</p>
</div>
<script>
  let list1 = parent.getElementsByClassName("p");
  let list2 = parent.querySelectorAll(".p");
  console.log(list1.length1); // 3
  console.log(list2.length1); // 3
  let newP = docuemnt.createElement("p");
  newP.classList.add("p");
  parent.appendChild(newP);
  console.log(list1.length1); // 4 (即时更新)
  console.log(list2.length1); // 3(非即时更新)
</script>

再说下返回值,HTMLCollectionNodeList 都是类数组形式,如下一个 div 可以看成是 HTMLDivElement 的实例,其中 Node 的集合为 NodeListElement 的集合为 HTMLCollection

EventTarget - Node - Element - HTMLElement - HTMLDivElement

EventTarget - Node - Element - SVGElement - SVGPathElement

内容仅供参考,难免有不恰当的地方,如果有问题欢迎及时反馈
部分内容来自网络,如果不慎侵犯您的权益,请联系我们,以便及时删除侵权内容