为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Howseeker 2017-03-16 21:44:01
为什么第二次 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>
查看完整描述

3 回答

已采纳
?
千秋此意

TA贡献158条经验 获得超187个赞

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

查看完整回答
4 反对 回复 2017-03-16
?
西兰花伟大炮

TA贡献376条经验 获得超318个赞

js里面的数组的长度是动态更新的,即使是类数组也是一样的

查看完整回答
2 反对 回复 2017-03-16
  • 3 回答
  • 2 关注
  • 1469 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信