📅  最后修改于: 2023-12-03 14:40:51.537000             🧑  作者: Mango
Web 开发中,常常需要使用 JavaScript 来操作 DOM 元素,例如修改样式、绑定事件等。然而在页面加载时,DOM 并不一定已经完全加载完毕,如果此时直接操作 DOM 元素,可能会导致出错。
因此,我们需要一种方式来确保 DOM 元素已经加载完毕,然后再执行 JavaScript 操作。本文将介绍一些常见的 DOM 就绪后的 JavaScript 执行方法,以及它们的优缺点。
window.onload
是最常见的 DOM 就绪后执行 JavaScript 的方法。它只有在整个页面包括图片等所有元素都加载完毕后才会执行,因此可以确保 DOM 已经完全加载完毕。
window.onload = function() {
// 在此处书写 JavaScript 代码
};
优点:
缺点:
window.onload
事件处理函数绑定到同一个事件上时,后面的一个会覆盖前面的一个DOMContentLoaded
事件是另一种常见的 DOM 就绪后执行 JavaScript 的方法。它会在 DOM 树构建完成后立即执行,而不需要等待所有资源的加载完成。因此,它比 window.onload
更快地执行 JavaScript 代码。
document.addEventListener('DOMContentLoaded', function() {
// 在此处书写 JavaScript 代码
});
优点:
window.onload
事件处理函数中缺点:
attachEvent
方法替代 addEventListener
方法DOMContentLoaded
事件处理函数内,否则可能会找不到某些元素$(document).ready()
方法是 jQuery 提供的一种 DOM 就绪后执行 JavaScript 的方法。它会在 DOM 树构建完成后立即执行,而不需要等待所有资源的加载完成,与 DOMContentLoaded
事件类似。它的语法如下:
$(document).ready(function() {
// 在此处书写 JavaScript 代码
});
优点:
缺点:
$(document).ready()
方法,后面的一个会覆盖前面的一个defer
属性是 HTML5 新增的属性,用于告诉浏览器推迟脚本的执行,直到文档加载完毕。它适用于不需要操作 DOM 元素的 JavaScript 代码,因为在推迟执行期间,DOM 元素可能还没有完全加载好。
<script src="your-script.js" defer></script>
优点:
defer
属性,无需担心覆盖问题缺点:
DOMContentLoaded
事件或 $(document).ready()
事件触发后再执行以上就是常见的 DOM 就绪后执行 JavaScript 的方法。它们各有优缺点,开发者可以根据实际情况选择最合适自己的方法。在编写代码时,最好将 JavaScript 代码放在<body>
标签底部,因为这样可以减少页面加载时间,提高用户体验。