Hi,各位,getElementsByTagName 返回的collection的长度是变化的.为什么?该怎么处理

Hi,各位,getElementsByTagName 返回的collection的长度是变化的.为什么?
很怪,不知道为什么.代码我讲一下, 原文是c#的,但是c#这方面人关注的少,所以在这里提问,反正原理一样的.
//伪代码
NavigateComplete()
{
  //此时页面还没有加载完成
  StartDetectBodyTimeout();//启动一次性计时器
}

_DetectBodyProc()
{
  if( body == null )
  {
  timer.start = true;//开始新的计时器
  return;
  }
  //即使body不为空,页面可能还没有加载完成.
  col = document.getElementsByTagName("a");
  ShowNumber( col.length ) ;//messagebox 显示大小
  //这里尚未停顿一些时候,让页面继续加载
  ShowNumber( col.length ) ;
}

我发现第二次显示的 lenght 大于第一次的.
这是怎么回事?
ms怎么实现的?
大家各抒己见吧.
谢谢.


------解决方案--------------------
document.getElementsByTagName("a"); 是在页面加载完之后调用的?
------解决方案--------------------
没加载完的时候。。内容的确只有一半,对这部分内容解析,标签<a>的长度就是不定的
------解决方案--------------------
col是引用变量,他指向document内部的一个具体对象,而document是在变化的
------解决方案--------------------

你如果在顶层的DocumentComplete之后再去get collection就不会变化了
------解决方案--------------------
其实本质的点是通过document.getElementsByTagName的dom API返回的只是一个对dom里面节点或者节点列表的一个引用而已,
浏览器在读取文本进行parse成dom结构的过程中,这里在早期返回的时候,就是你执行调用的这个点,获取到的a的个数是之前的已经parse完的部分,当执行到最后,已经完整的parse了整个dom的时候,再次调用会重新计算这里a的个数,这点没什么稀奇的。
举个例子:你把获取div的代码放到<div></div>的上面执行,是获取不到对应的HTMLDIVElement对象一样的道理。
------解决方案--------------------
应该每次调用的时候都是parse当前获得dom结构等,从而dom加载的比例,从而发生了变化