DOMContentLoaded事件在HTML解析完成、DOM树构建好时触发,不等待CSS、图片等资源;推荐用addEventListener绑定,区别于需等全部资源加载的window.onload。

JavaScript 中监听页面 DOM 内容加载完成,主要用 DOMContentLoaded 事件,它在 HTML 文档解析完毕、DOM 树构建完成时触发,不等待样式表、图片、iframe 等资源加载。
监听 DOMContentLoaded 事件
推荐使用 addEventListener 绑定,确保代码在 DOM 就绪前执行(比如放在 <head> 中):
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM 已加载完成,可以安全操作元素');
// 此处可获取、修改、绑定事件等
});
注意与 window.onload 的区别
DOMContentLoaded 和 window.onload 容易混淆,关键差异如下:
- DOMContentLoaded:只等 HTML 解析和 DOM 构建完成,不等外部资源(如 CSS、JS、图片);速度快,适合初始化 DOM 操作。
- window.onload:要等整个页面(包括所有依赖资源)完全加载完毕才触发;适合需确保图片、样式已就绪的场景(如读取图片尺寸)。
兼容性与特殊情况处理
现代浏览器均支持 DOMContentLoaded,IE9+ 也支持。若需兼容极老 IE(如 IE8),可用以下降级方案:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
function ready(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else {
fn();
}
}
ready(function() {
// 执行初始化逻辑
});
另外,如果脚本本身放在 <body> 底部(或加了 defer 属性),DOM 天然就绪,此时可直接执行,无需监听。
避免重复监听或过早执行
常见错误是把监听写在未确保执行时机的地方,例如:
- 脚本放在
<head>但没监听事件,直接操作document.getElementById→ 返回null; - 多次调用
addEventListener('DOMContentLoaded', ...)→ 导致回调重复执行(建议只绑定一次,或用{ once: true })。
稳妥做法是统一用 DOMContentLoaded 监听,并把初始化逻辑封装进回调函数中。

















