JS遇到一个问题,求路过的大神帮忙解答一下

为什么第二次 alert 出来的直接就是123?求解答。手动感激~~

<html>
<head>
</head>
<body>

<ul id="list">
<li></li>
<li></li>
<li></li>
</ul>

<script>

var list=document.getElementById('list');
var arr_list=list.childNodes;
alert(arr_list[arr_list.length-1].innerHTML);
var LI=document.createElement('li');
LI.innerHTML=123;
list.appendChild(LI);
alert(arr_list[arr_list.length-1].innerHTML);  //为什么这里不需要重置 arr_list 数组就能获取到ul新添加的子元素?

//在将一个新的 li 标签写入 ul 之后,不是要重新写一次 arr_list=list.childNodes; 才能获取到新添加进去的 li 吗? 


</script>
</body>
</html>


Howseeker
浏览 1473回答 3
3回答

千秋此意

因为getElementById方法(包括其他tagName,className,childNodes等)获取的其实并不是一个真正的数组,虽然它也有数组的一些特性(比如length、index),但是只能算是类数组对象、伪数组,在控制台中打印出来可以发现他们都是一个叫做NodeList的集合,NodeList集合和数组有一个重要的区别,在DOM规范中有说过NodeList(还有HTMLCollection)等集合都有一个live(动态、实时)特性,也就是说动态的NodeList集合所对应的DOM节点发生了任何改变都会实时的反映到对应的集合中,并不需要重新获取。

西兰花伟大炮

js里面的数组的长度是动态更新的,即使是类数组也是一样的
打开App,查看更多内容
随时随地看视频慕课网APP