很怪,不知道为什么.代码我讲一下, 原文是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怎么实现的?
大家各抒己见吧.
谢谢.
//伪代码
NavigateComplete()
{
//此时页面还没有加载完成
StartDetectBodyTimeout();//启动一次性计时器
}_DetectBodyProc()
{
if( body == null )
{
timer.start = true;//开始新的计时器
return;
}
//即使body不为空,页面可能还没有加载完成.
col = document.getElementsByTagName("a");
ShowNumber( col.length ) ;//messagebox 显示大小
//这里尚未停顿一些时候,让页面继续加载
ShowNumber( col.length ) ;
}我发现第二次显示的 lenght 大于第一次的.
这是怎么回事?
ms怎么实现的?
大家各抒己见吧.
谢谢.
你如果在顶层的DocumentComplete之后再去get collection就不会变化了
浏览器在读取文本进行parse成dom结构的过程中,这里在早期返回的时候,就是你执行调用的这个点,获取到的a的个数是之前的已经parse完的部分,当执行到最后,已经完整的parse了整个dom的时候,再次调用会重新计算这里a的个数,这点没什么稀奇的。
举个例子:你把获取div的代码放到<div></div>的上面执行,是获取不到对应的HTMLDIVElement对象一样的道理。