位置: 编程技术 - 正文

深入分析jQuery的ready函数是如何工作的(工作原理)(简述jquery的优势)

编辑:rootadmin

推荐整理分享深入分析jQuery的ready函数是如何工作的(工作原理)(简述jquery的优势),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简述jquery的常用方法,jquery原理解析,浅谈jquery的应用,jquery的理解,简述jquery,jquery概述,jquery原理解析,jquery原理解析,内容如对您有帮助,希望把文章链接给更多的朋友!

本文深入分析jQuery的ready函数是如何工作的。分享给大家供大家参考,具体如下:

jQuery 是一个伟大的脚本库,由 John Resig 在 年1月的BarCamp NYC上释出第一个版本。你可以在 下载到最新版本,截止本文发布为止已更新到jQuery 2.1.4版。这里以jQuery1.8.3为例分析。

学习 jQuery 有许多途径,我们今天从 jQuery 的 ready 函数开始。本例中的代码都来自于 jQuery 脚本库。

如果你使用过 jQuery , 就必然使用过 ready 函数,它用来注册当页面准备好之后可以执行的函数。

问题来啦,我们的页面什么时候准备好了呢?

1. onload 事件

最基本的处理方式就是页面的 onload 事件,我们在处理这个事件的时候,可以有多种方式,即可以通过 HTML 方式,直接写在 body 元素的开始标记中,也可以使用事件注册的方式来使用,这又可以分为 DOM0 方式和 DOM2 方式。再考虑到浏览器的兼容性,使用 DOM2 方式写出来,如下所示。

2. DOMContentLoaded 事件

不过 onload 事件要等到所有页面元素加载完成才会触发, 包括页面上的图片等等。如果网页上有大量的图片,效果可想而知,用户可能在没有看到图片的时候,就已经开始操作页面了,而这时我们的页面还没有初始化,事件还没有注册上,这岂不是太晚了!

除了大家熟知的 onload 事件之外, 与 DOM 中的 onload 事件相近的,我们还有 DOMContentLoaded 事件可以考虑, 基于标准的浏览器支持这个事件, 当所有 DOM 解析完以后会触发这个事件。

这样,对于基于标准的浏览器来说,我们还可以注册这个事件的处理。这样,我们可能更早地捕获到加载完成的事件。

3. onreadystatechange 事件

不标准的浏览器怎么办呢?

如果浏览器存在 document.onreadystatechange 事件,当该事件触发时,如果 document.readyState=complete 的时候,可视为 DOM 树已经载入。

不过,这个事件不太可靠,比如当页面中存在图片的时候,可能反而在 onload 事件之后才能触发,换言之,它只能正确地执行于页面不包含二进制资源或非常少或者被缓存时作为一个备选吧。

DOMContentLoaded 函数在做什么呢?最终还是要调用 jQuery.ready 函数。

深入分析jQuery的ready函数是如何工作的(工作原理)(简述jquery的优势)

4. doScroll 检测法

MSDN 关于 JScript 的一个方法有段不起眼的话,当页面 DOM 未加载完成时,调用 doScroll 方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

Diego Perini 在 年的时候,报告了一种检测 IE 是否加载完成的方式,使用 doScroll 方法调用。详细的说明见这里。原理是对于 IE 在非 iframe 内时,只有不断地通过能否执行 doScroll 判断 DOM 是否加载完毕。在本例中每间隔 毫秒尝试去执行 doScroll,注意,由于页面没有加载完成的时候,调用 doScroll 会导致异常,所以使用了 try -catch 来捕获异常。

5. document.readyState 状态

如果我们注册 ready 函数的时间点太晚了,页面已经加载完成之后,我们才注册自己的 ready 函数,那就用不着上面的层层检查了,直接看看当前页面的 readyState 就可以了,如果已经是 complete ,那就可以直接执行我们准备注册的 ready 函数了。不过 ChrisS 报告了一个很特别的错误情况,我们需要延迟一下执行。

setTimeout 经常被用来做网页上的定时器,允许为它指定一个毫秒数作为间隔执行的时间。当被启动的程序需要在非常短的时间内运行,我们就会给她指定一个很小的时间数,或者需要马上执行的话,我们甚至把这个毫秒数设置为0,但事实上,setTimeout有一个最小执行时间,当指定的时间小于该时间时,浏览器会用最小允许的时间作为setTimeout的时间间隔,也就是说即使我们把setTimeout的毫秒数设置为0,被调用的程序也没有马上启动。

这个最小的时间间隔是多少呢?这和浏览器及操作系统有关。在John Resig的新书《Javascript忍者的秘密》一书中提到

Browsers all have a ms minimum delay on OSX and a(approximately) ms delay on Windows.(在苹果机上的最小时间间隔是毫秒,在Windows系统上的最小时间间隔大约是毫秒),另外,MDC中关于setTimeout的介绍中也提到,Firefox中定义的最小时间间隔(DOM_MIN_TIMEOUT_VALUE)是毫秒,HTML5定义的最小时间间隔是4毫秒。既然规范都是这样写的,那看来使用setTimeout是没办法再把这个最小时间间隔缩短了。

这样,通过设置为 1, 我们可以让程序在浏览器支持的最小时间间隔之后执行了。

6. 完整的代码

在 jQuery 中完整的代码如下所示。位于 jQuery 1.8.3 源代码的 # 行。

那么,又是谁来调用呢?当然是需要的时候,在我们调用 ready 函数的时候,才需要注册这些判断页面是否完全加载的处理,这段代码在 1.8.3 中位于代码的 # 行,如下所示:

在页面上引用 jQuery 脚本库之后,执行了 jQuery 的初始化函数,初始化函数中创建了 ready 函数。我们在通过 ready 函数注册事件处理之前,jQuery 完成了页面检测代码的注册。这样。当页面完全加载之后,我们注册的函数就被调用了。

补充:jquery ready 简写模式

Jquery ready 函数:

可简写为:

希望本文所述对大家jQuery程序设计有所帮助。

jQuery选择器用法实例详解 本文实例讲述了jQuery选择器用法。分享给大家供大家参考,具体如下:jQuery使用两种方式来选择html的element,第一种使用CSS和Xpath选择器联合起来形成一

jQuery+CSS实现滑动的标签分栏切换效果 本文实例讲述了jQuery实现平滑滚动的标签分栏切换效果。分享给大家供大家参考。具体如下:运行代码如下具体代码如下htmlheadtitlejQuery平滑滚动的标签

jQuery实现进度条效果代码 在某些特定的场景下,应用进度条效果,可以提高网站的人性化程度,能够让用户能够掌握进度,增加对进度的耐心,否则可能直接导致关闭页面,从

标签: 简述jquery的优势

本文链接地址:https://www.jiuchutong.com/biancheng/377721.html 转载请保留说明!

上一篇:基于jquery实现省市联动特效(jquery示例)

下一篇:jQuery选择器用法实例详解(jquery选择器包含哪几大类)

  • 公司支付的房租押金怎么入账
  • 金税三期收入额是多少
  • 税务师考几科几分及格
  • 可明确区分的商品
  • 子公司注销母公司投资损失企业所得税
  • 金融业产值和金融业增加值有什么不同
  • 公司工资0申报
  • 预付账款怎么处理
  • 本期准予抵减税额怎么算
  • 二类经适房转商品房需要交多少钱
  • 什么样的运输发动机最好
  • 坏账冲回要纳税调减吗
  • 增值税销项税额在借方还是贷方
  • 购买债券取得的利息收入计入什么科目
  • 仪器检测费发票哪一类
  • 土地使用权出资入股税费
  • 在建工程转固后又发生成本
  • 海关进口增值税专用缴款书图片
  • 公司购买银行理财产品会计分录怎么写
  • 所得税多交但又不想去税务局退税怎样做账?
  • 增值税进项税额在借方还是贷方
  • 培训费用走账需要交税吗
  • 进项税额能抵扣的几种情形
  • 财务报告成本
  • 应付款项余额
  • 自产自用产品的会计处理
  • 房租租赁公司,对方还没付租金,怎么挂帐
  • 社保费税前扣还是税后扣
  • php论坛代码
  • php中session什么意思
  • 微信小程序实现发红包
  • 使用php进行mysql数据库编程的基本步骤
  • 多提附加税跨年怎么计算
  • 什么样的发票可以报销
  • 税控机动车销售统一发票抵扣
  • 限售股转让个人所得税退税
  • js正则表达式删除特定字符
  • python进行傅立叶变换
  • vue2 vue-router 不显示页面问题
  • springmvc执行流程简单
  • 自产赠送视同销售的成本怎么确定
  • 逻辑电路选择器
  • 居民企业和非居民企业如何判定?
  • 企业银行电子回单一般什么时候打印
  • 残疾人报税怎么报
  • 非限定性净资产包括哪些科目
  • 汽车修理厂利润
  • 公司年度汇算
  • 不动产集体产权证什么意思
  • 其他货币资金的六个内容
  • 完全卸载mysql8.0
  • 设备服务费
  • 营业成本和生产费用一样吗
  • 原材料的主要账务处理
  • 企业发行债券的优点有哪些
  • 材料报废如何做分录
  • 货物已发出可以退款吗
  • 财务费用汇兑损益
  • 待抵扣税额转入进项税额的分录
  • 开销项负数的流程
  • innodb_index_stats导入备份数据时报错表主键冲突的解决方法
  • 通过注册表修改office默认字体
  • 电脑无法检测到麦克风怎么办
  • 电脑出现系统状态
  • win 8系统怎么样
  • 毕竟近义词语
  • win8.1桌面图标消失
  • win8打不开咋办
  • 基于web的学生成绩管理系统毕业论文
  • shell脚本自动化
  • node服务器部署
  • js标志
  • unity 2021.2
  • java script教程
  • jquery插件开发方法
  • 江苏电子税务局操作手册
  • 航空煤油消费税征收环节
  • 现在企业可以享受低保吗
  • 河南省税务零申报怎么操作
  • 关于啤酒包装物押金,下列正确的是( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设