JavaScript 中 querySelectorAll 与 getElementsByClassName 的区别

单单讨论最基础的功能:选择 class 对象来说,querySelectorAll () 是静态的,函数一旦被使用,内容就不会再改变

而 getElementsByClassName () 是动态的,其长度会随着 class 的动态修改而变化,也就是说用 for 循环批量删除 class 属性时是删除不完的,例如:

  var unchecked_li = document.getElementsByClassName('unchecked');
  //	var unchecked_li = document.querySelectorAll('.unchecked');
  for (var i = 0; i < unchecked_li.length; i++) {
    unchecked_li[i].classList.remove("unchecked");
  }

此时只有一半的带”unchecked” 属性的元素会成功删除掉此元素,这时我们如果换用 var unchecked_li = document.querySelectorAll('.unchecked'); 就可以成功删除完整