jQuery的ready方法详解 - Web前端
作者:98wpeu发布时间:2026-07-12分类:网页前端技术浏览:2
JQuery中的ready方法实现了当页面加载完成后才执行的效果,但他并不是window.onload或者doucment.onload的封装,而是使用 标准W3C浏览器DOM隐藏API和ie浏览器缺陷来完成的,首先,我们来看jQuery的代码
复制代码 代码如下:
domContentLoaded = function()
{
//取消事件监听,执行ready方法 if ( document.addEventListener )
{
document.removeeventlistener( "DOMContentLoaded", DOMContentLoaded, false );
jquery.ready();
}
else if ( document.readyState === "complete" )
{
document.detachEvent( "onreadystatechange", DOMContentLoaded );
jquery.ready();
}
};
复制代码 代码如下:
JQuery.ready.Promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
//表示页面已经加载完成,直接调用 ready方法 if ( document.readyState === "complete" ) {
//将 jQuery.ready压入异步消息队列,设置延迟时间1毫秒(注意,有些浏览器延迟不能小于4毫秒) setTimeout( jQuery.ready);
}
else if ( document.addEventListener ) // {
//监听DOM加载完成 document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
//这里是为了确保所有ready执行结束,如果DOMContentLoaded方法执行了,将有一个状态值 isReady被设置为true,因此, //ready方法一旦执行,那么将只执行一次,window.addEventListener中的ready 将被 return 中断 window.addEventListener( "load", jQuery.ready, false );
} else {
//低版本的IE浏览器 document.attachEvent( "onreadystatechange", DOMContentLoaded );
window.attachEvent( "onload", jQuery.ready );
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doscroll ) //剔除iframe的成分 {
(function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
//根据bug来兼容低版本的IE http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left");
} catch(e) {
//由于低版本的IE 浏览器,onreadystatechange事件不可靠,因此需要根据各个bug来判断页面是否已加载完成 return settimeout( doScrollCheck, 50 );
}
jQuery.ready();
}
})();
}
}
}
return readyList.promise( obj );
};
复制代码 代码如下:
ready: function( wAIt )
{
if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
//判断页面是否已完成加载并且是否已经执行ready方法
return;
}
if ( !document.body ) {
return settimeout( jQuery.ready );
}
jQuery.isReady = true; //指示ready方法已被执行
if ( wait !== true && --jQuery.readyWait > 0 ) {
return;
}
readyList.resolveWith( document, [ jQuery ] );
if ( jQuery.fn.trigger ) {
jQuery( document ).trigger("ready").off("ready");
}
},
总结:
页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成。(可以说:ready 在onload 前加载!!!)
一般样式控制的,比如图片大小控制放在onload 里面加载;
JS事件触发的方法,可以在ready 里面加载;
相关推荐
- 9款2014最热门jQuery实用特效推荐 - Web前端
- jQuery中;function($,undefined) 前面的分号的用处 - Web前端
- jquery 实现返回顶部功能 - Web前端
- jquery的总体架构分析及实现示例详解 - Web前端
- Jquery通过JSON字符串创建JSON对象 - Web前端
- jQuery固定浮动侧边栏实现思路及代码 - Web前端
- 一个简单的动态加载js和css的jquery代码 - Web前端
- jquery常用方法及使用示例汇总 - Web前端
- jquery ajax请求方式与提示用户正在处理请稍等 - Web前端
- jquery让返回的内容显示在特定div里(代码少而精悍) - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3【第六章】Foundation之按钮和下拉功能 - Web前端
- 4jQuery编写widget的一些技巧分享 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 7jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 8分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 9javascript原生和jquery库实现iframe自适应高度和宽度 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


