如果只需要对dom进行操作,那么这时就没必要等到页面全部加载了。我们需要更快的方法。
firefox有domcontentloaded事件可以轻松解决,可惜的就是ie没有。
msdn关于jscript的一个方法有段不起眼的话,当页面dom未加载完成时,调用doscroll方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面dom加载完毕了!
复制代码 代码如下:
function iecontentloaded (w, fn) {
var d = w.document, done = false,
// only fire once
init = function () {
if (!done) {
done = true;
fn();
}
};
// polling for no errors
(function () {
try {
// throws errors until after ondocumentready
d.documentelement.doscroll('left');
} catch (e) {
settimeout(arguments.callee, 50);
return;
}
// no errors, fire
init();
})();
// trying to always fire before onload
d.onreadystatechange = function() {
if (d.readystate == 'complete') {
d.onreadystatechange = null;
init();
}
};
}
这个函数是diego perini在07年就发布了这个方法,
而且获得了广泛认同,以至于现在许多开源框架都是借鉴这种方法,譬如jquery中的ready。
如果以后需要用到ie的domready,就是他了。
用法:
iecontentloaded( document.getelementbyid(test) , test );
function test(){ }