document.ready vs window.onload
jQuery 中 $(document).ready() 与 window.onload 的区别和使用场景
问题
jQuery 中的 $(document).ready() 与 window.onload 有什么区别?
解答
window 与 document 的区别
window 对象表示浏览器中打开的窗口,可以省略调用,如 window.console.log() 等价于 console.log()。
document 对象是 window 对象的一部分,表示浏览器的 HTML 文档,如 document.body 等价于 window.document.body。
$(document).ready()
当浏览器加载并解析完整个 HTML 文档,DOM 树建立完成后执行。
原生 JavaScript 写法:
document.addEventListener('DOMContentLoaded', function() {
alert("ready");
});
jQuery 写法:
$(document).ready(function() {
alert("ready");
});
// 简写
$(function() {
alert("ready");
});
$(window).load()
当页面中所有元素(包括图片、CSS 文件等所有关联文件)完全加载到浏览器后执行。
原生 JavaScript 写法:
window.onload = function() {
alert("onload");
};
jQuery 写法:
$(window).load(function() {
alert("onload");
});
执行顺序
DOM 文档加载步骤:
- 解析 HTML 结构
- 加载外部脚本和样式表文件
- 解析并执行脚本代码
- 构造 HTML DOM 模型(ready 触发)
- 加载图片等外部文件
- 页面加载完毕(load 触发)
编写多个的区别
window.onload 只能编写一个,多个会被覆盖:
// 只会执行第二个
window.onload = function() {
alert("text1");
};
window.onload = function() {
alert("text2");
};
$(document).ready() 可以编写多个,都会执行:
$(document).ready(function() {
alert("Hello World");
});
$(document).ready(function() {
alert("Hello again");
});
关键点
$(document).ready()在 DOM 树构建完成后执行,window.onload需等待所有资源(包括图片)加载完成$(document).ready()可以编写多个且都会执行,window.onload多个会被覆盖$(document).ready()可简写为$(function(){}),window.onload无简写- 为 DOM 元素添加事件用
$(document).ready()效率更高,但需要等待图片加载完成的场景必须用window.onload
目录