处理HTML DOM文档存在的一个的难题是,JavaScript可以在DOM完全加载之前执行,这会带来很多的潜在问题。浏览器的渲染和操作顺序大致如下:
浏览器的渲染和操作顺序:
HTML解析完毕
外部脚本和样式表加载完毕
脚本在文档内解析并执行
HTML DOM完全构造出来
图片和外部内容加载
网页完成加载
在网页头部或者从外部文件加载的脚本会在HTML真正构造之前执行,导致脚本还不能访问还不存在的DOM。
1. 等待整个页面的加载
最常用的技术是完全等待整个页面加载完毕之后才执行DOM操作。这种技术在window对象的load事件上绑定一个函数,页面加载完毕后触发该函数。
// 等到页面加载完毕
addEvent(window, "load", function() {
// 执行 HTML DOM 操作
next( id("everywhere") ).style.background = 'blue';
});
2. 等待大部分DOM的加载
因为只有在DOM构造后,执行到该位置的脚本才真正执行。这意味着中途嵌入的脚本只能访问该位置之前的DOM。所以页面最后元素之前嵌入脚本,就可以在DOM中访问这个元素之前全部的脚本。
Testing DOM Loadingfunction init() {
alert( "The DOM is loaded!" );
tag("h1")[0].style.border = "4px solid black";
}