+-
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部分代码:

<ul id="a">
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
</ul>
<ol>
 <li>2</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
</ol>

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

受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...