首页 > web前端 > js教程 > 用JavaScript替换jQuery文档就绪功能

用JavaScript替换jQuery文档就绪功能

Lisa Kudrow
发布: 2025-02-17 09:56:10
原创
434 人浏览过

Replace the jQuery Document Ready Function with JavaScript

jQuery 的 $(document).ready() 方法用于在 DOM 完全加载后执行代码。由于它在所有 DOM 元素都可用时执行给定的函数,因此可以确保尝试访问或操作元素能够正常工作。

在 jQuery 3.0 之前,使用匿名函数的典型用法如下:

$(document).ready(function() {
  // .ready() 的处理程序被调用。
});
登录后复制
登录后复制

关键要点

  • jQuery 的 document.ready 方法确保代码仅在所有 DOM 元素安全可操作时才执行,但在 jQuery 3.0 中已发生重大更改,所有语法方法(除了 $(handler);)都已弃用。
  • DOMContentLoaded 事件是 jQuery ready 方法的纯 JavaScript 替代方案,可用于现代浏览器和 IE9 。对于旧版本的 IE,可以使用 onreadystatechange 事件。
  • 在许多情况下,可能不需要使用任何这些解决方案。只需将 JavaScript 代码放在结束标签 </body> 之前,就能确保 DOM 已完成加载。

jQuery 3.0 中 ready() 的更改

在 3.0 版本发布之前,您可以通过几种方式调用 ready 方法:

  • 在文档元素上:$(document).ready(handler);
  • 在空元素上:$().ready(handler);
  • 或直接调用(即不在特定元素上):$(handler);

以上所有变体在功能上都是等效的。无论在哪个元素上调用,只要 DOM 完全加载,指定的处理程序都会被调用。换句话说,在图像元素 $("img") 上调用它与在文档元素上调用它并没有区别,回调函数的触发时间与指定元素的加载无关。相反,它将在整个 DOM 完全加载后被调用。

在 jQuery 3.0 中,除了 $(handler); 之外的所有其他语法方法都已弃用。官方的理由是:

这是因为选择与 .ready() 方法的行为无关,这效率低下,并可能导致对该方法行为的错误假设。

ready 事件和 load 事件之间的区别

ready 事件在 DOM 完全加载并可以安全访问元素时触发。另一方面,load 事件在 DOM 和所有资源加载完毕后触发。

load 事件可以使用如下方式:

$(window).on("load", function(){
  // 所有资源(包括图像)加载完毕时的处理程序
});
登录后复制
登录后复制

这不仅等待 DOM 准备好进行交互,还等待图像完全加载(这可能需要一些时间,具体取决于图像大小)。

对于普通的 DOM 操作,您可能不需要 load 事件,但如果您想在所有资源加载完毕之前显示加载微调器,或者如果您想使用图像大小进行一些计算,它可能是正确的选择。

您可能不需要 jQuery.ready()

ready 方法确保代码仅在所有 DOM 元素安全可操作时才执行。但这意味着什么?当您在 HTML 文档的 <body> 部分执行 JavaScript 代码时,这将确保代码在浏览器也加载所有后续元素(例如 <code><p> 元素)后执行:

$(document).ready(function() {
  // .ready() 的处理程序被调用。
});
登录后复制
登录后复制

如果您将 JavaScript 代码作为 <body> 中的最后一件事执行,您可能不需要将其包装在 ready() 中,因为您可能尝试操作或访问的所有元素都已加载:

$(window).on("load", function(){
  // 所有资源(包括图像)加载完毕时的处理程序
});
登录后复制
登录后复制

纯 JavaScript ready() 替代方案

对于现代浏览器和 IE9 ,您可以监听 DOMContentLoaded 事件:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>.ready() 教程</title>
  <🎜>
</head>
<body>
  <🎜>
  <p>我是这个网站的内容</p>
</body>
</html>
登录后复制

但是,请注意,如果事件已经触发,则不会执行回调函数。为了确保始终运行回调函数,jQuery 会检查文档的 readyState(引用),如果它已经完成,则立即执行回调函数:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>.ready() 教程</title>
</head>
<body>
  <p>我是这个网站的内容</p>
  <🎜>
  <🎜>
</body>
</html>
登录后复制

您还可以包含 domReady 库,该库已经实现了此解决方案。

旧版本的 Internet Explorer

对于小于或等于 8 的 IE 版本,您可以使用 onreadystatechange 事件来检测文档的 readyState

document.addEventListener("DOMContentLoaded", function(){
  // DOM 完全加载时的处理程序
});
登录后复制

或者,您可以像 jQuery 一样使用 load 事件,因为这将在任何浏览器中都能工作。这也导致时间延迟,因为它将等待所有资源加载完毕。请注意,您还必须像上面解释的那样检查 readyState,以确保即使事件已经触发,回调函数仍然会被执行。

结论

如果您正在寻找 ready 方法的纯 JavaScript 替代方案,您可以使用 DOMContentLoaded 事件。如果您的系统需求包括 IE,那么您可能需要使用 onreadystatechange 事件或 load 事件。

如果您在项目中使用 jQuery,您可以安全地继续使用 jQuery 的 document.ready 函数,但请记住避免像前面提到的那样在元素上使用(已弃用)的 ready() 方法(例如 $(document).ready())。

最后,不要忘记在许多情况下您可能不需要任何这些解决方案——只需将您的 JavaScript 代码移动到结束标签

以上是用JavaScript替换jQuery文档就绪功能的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板