无 jQuery 实现 $(document).ready 等效功能
无 jQuery 实现 $(document).ready 等效功能
技术背景
在前端开发中,$(document).ready()
是 jQuery 提供的一个非常实用的方法,用于在文档的 DOM 完全加载后执行代码。然而,在某些情况下,我们可能不想引入 jQuery 库,或者需要在不依赖 jQuery 的环境中实现相同的功能。因此,需要找到标准的替代方案来实现文档就绪时执行代码的功能。
实现步骤
1. 使用 DOMContentLoaded
事件
DOMContentLoaded
是一个标准的事件,当 HTML 文档被完全加载和解析完成后,会触发该事件,而无需等待样式表、图像和子框架的加载。大多数现代浏览器都支持该事件,但不包括 IE8。
1 |
|
2. 兼容旧浏览器的实现
为了兼容旧浏览器(如 IE8),可以结合 document.readyState
属性和 onreadystatechange
事件来实现。
1 |
|
3. 使用 defer
属性
在 HTML5 中,<script>
标签有一个 defer
属性,它指定脚本在页面解析完成后执行,这也可以达到类似 $(document).ready()
的效果。
1 |
|
核心代码
简洁实现
1 |
|
兼容多浏览器的实现
1 |
|
最佳实践
- 优先使用
DOMContentLoaded
:在支持的浏览器中,优先使用DOMContentLoaded
事件,因为它比window.onload
更快,不需要等待所有资源加载完成。 - 兼容旧浏览器:如果需要兼容旧浏览器(如 IE8),可以使用上述的兼容代码。
- 使用
defer
属性:在现代浏览器中,使用<script>
标签的defer
属性可以简化代码,提高性能。
常见问题
1. DOMContentLoaded
和 window.onload
的区别
DOMContentLoaded
事件在 HTML 文档被完全加载和解析完成后触发,而 window.onload
事件在页面的所有资源(包括图像、样式表等)加载完成后触发。因此,DOMContentLoaded
通常比 window.onload
更快。
2. 代码在旧浏览器中不工作
如果代码在旧浏览器中不工作,可能是因为不支持 DOMContentLoaded
事件。可以使用上述的兼容代码,结合 document.readyState
和 onreadystatechange
事件来解决。
3. 动态插入的脚本
如果脚本是动态插入的,可能会出现文档已经加载完成,但 DOMContentLoaded
事件已经触发的情况。可以在插入脚本时检查 document.readyState
属性,如果文档已经加载完成,则直接执行代码。
无 jQuery 实现 $(document).ready 等效功能
https://119291.xyz/posts/2025-05-14.equivalent-of-document-ready-without-jquery/