JS里onload函数里,getElementsByTagName的疑问?

JS部分代码:

window.onload = function () {
    k = document.getElementsByTagName("li");
 for (var i = 0; i < 10; i++) {
        document.write(k[i].innerHTML);
        /*
        问题:
        1、再次执行此代码document.write(k[i].innerHTML),找不到对象
        2、执行完一次for语句后,k变为空数组。
        */
 
 }
}
HTML部分代码:

  • 1
  • 2
  • 3
  • 4
  • 5
  1. 2
  2. 2
  3. 3
  4. 4
  5. 5

请大佬解释下这是为什么呢?

最佳答案

受document.write的影响,会清空文档内容。即使用了document.write会导致文档中已存在的节点都被清空掉。

其次: document.getElementsByTagName获取的集合是动态的,即当节点被清空后,k的值也是跟随着变化的。

window.onload = function () {
  k = document.getElementsByTagName("li");
  for (var i = 0; i < 10; i++) {
    console.log('k', k)
    document.write(k[i].innerHTML);
  }
}

参考:

https://developer.mozilla.org...

https://developer.mozilla.org...

https://developer.mozilla.org...