虽然我通常主张在必要时避免使用框架,但我想说在这种情况下使用框架是完全可以的。这是 jQuery:
$(function () {
// do stuff after DOM has loaded
});
请注意,它与window.onload 事件不同,因为onload 在其他资源(图像等)加载后首先执行。我在示例中使用的代码将在 DOM 完成加载后执行,即,当完整的 HTML 结构可用时(不一定当图像、CSS 等可用时)。
如果你想要一个可检查的变量,你可以在 ready-function 中设置一个:
var documentIsReady = false;
$(function () { documentIsReady = true; });
当然,如果您只想检查 DOM 就绪,您可以找到比 jQuery 更多的轻量级库。但是在不同浏览器的行为非常不同的情况下使用库(这是一种情况。)
使用DOMAssistant library 中的一些代码,制作您自己的“DOM 就绪”函数应该不会太难:
var domLoaded = function (callback) {
/* Internet Explorer */
/*@cc_on
@if (@_win32 || @_win64)
document.write('<script id="ieScriptLoad" defer src="//:"><\/script>');
document.getElementById('ieScriptLoad').onreadystatechange = function() {
if (this.readyState == 'complete') {
callback();
}
};
@end @*/
/* Mozilla, Chrome, Opera */
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', callback, false);
}
/* Safari, iCab, Konqueror */
if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) {
var DOMLoadTimer = setInterval(function () {
if (/loaded|complete/i.test(document.readyState)) {
callback();
clearInterval(DOMLoadTimer);
}
}, 10);
}
/* Other web browsers */
window.onload = callback;
};
未经测试,但它应该可以工作。我从 DOMAssistant 简化了它,因为 DOMAssistant 允许多个回调,并且检查以确保您不能两次添加相同的函数等。