浏览器的渲染和操作顺序大致如下
HTML解析完毕
外部脚本和样式表加载完毕
脚本在文档内解析并执行
HTML DOM 完全构造起来
图片和外部内容加载
---------------------》导致 有的脚本不能访问还不存在的DOM 《--------------------
解决:
1, 等整个页面加载完毕才执行DOM操作
缺点: 速度慢, 如果页面有很多图片,视频等用户可能得等一段时间
2, 等待大部分DOM的加载
缺点: 麻烦
3.最复杂
HTML解析完毕
外部脚本和样式表加载完毕
脚本在文档内解析并执行
HTML DOM 完全构造起来
图片和外部内容加载
---------------------》导致 有的脚本不能访问还不存在的DOM 《--------------------
解决:
1, 等整个页面加载完毕才执行DOM操作
addEvent(window, "load", function(){
//执行HTML DOM操作
})
缺点: 速度慢, 如果页面有很多图片,视频等用户可能得等一段时间
2, 等待大部分DOM的加载
<html>
<head>
<script>
function init(){
执行HTML DOM操作
}
</script>
</head>
<body>
<!-- HTML -->
<script>init();</script>
</body>
</html>
缺点: 麻烦
3.最复杂
function domReady(f){
if(domReady.done)
return f();
if(domReady.timer){
domReady.ready.push(f);
}else{
addEvent(window, "load", isDOMReady);
domReady.ready = [f];
// 尽可能快的检查DOM是否已可用
domReady.timer = setInterval(isDOMReady, 13);
}
}
function isDOMReady(){
if(domReady.done)
return false;
if(document && document.getElementsByTagName
&& document.getElementById && document.body){
clearInterval(domReady.timer);
domReady.timer = null;
for(var i=0; i<domReady.ready.length; i++){
domReady.ready[i]();
}
domReady.ready = null;
domReady.done = true;
}
}