jquey有3种针对文档加载的方法:

//document ready
$(document).ready(function(){
//...代码...
}) //document ready 简写
$(function(){
//...代码...
}) // document load
$(document).load(function(){
// ... 代码 ...
})

 一个是ready一个是load,这两个到底有什么区别呢?

  在面试种,经常会被问到一个问题:ready与load哪一个先执行?答案是:ready先执行,load后执行。

DOM文档加载的步骤:

  1. 解析HTML结构。

2. 加载外部脚本和样式表文件

   3. 解析并执行脚本代码

   4. 构造HTML DOM模型。// ready

   5. 加载图片等外部文件

   6. 页面加载完毕。// load

从上面的描述中,ready在第四步完成之后就执行了,但是load要在第六步完成之后才执行。

结论:

  ready 是当DOM解析完以后就执行了

  load 是页面上所有的元素加载完成才会触发,包括页面上的图片等等

   在一个高速浏览器的时代,没人愿意等待,我们越早处理DOM越好,我们不需要等待图片资源都加载后才去处理框架的加载。

jQuery是如何处理文档加载的问题:

  先看一下jQuery源码:

function completed(){
document.removeEventListner('DOMContentLoaded',completed,false);
window.removeEventListner('load',completed,false);
jQuery.ready();
}
jQuery.ready.promise = function(obj){
if(!readyList){
readyList = jQuery.Deferred();
if(document.readyState == "complete"){//webkit引擎,并且webkit版本在525以下
setTimeout(jQuery.ready);//这里设置了一个定时器最小时间去执行,主要是保证执行的正确。
}else{//火狐浏览器 或者 webkit引擎525版本以上(webkit引擎在525以上引入了DOMContentLoaded事件)
document.addEventListner('DOMContentLoaded',completed,false);
window.addEventListner('load',completed,false)
}
}
return readyList.promise(obj);
}

  jquery的ready是通过promise给包装过的的,这也是jQuery擅长的手法,统一回调体系。

  jQuery的具体实现方法:

    1. 如果是webkit引擎,则用document的readyState属性,当值为“complete”或者“loaded”时认为是DOM解析完成

    2. 对webkit引擎还有一个办法是,因为webkit在525以上的版本引入了DOMContentLOaded事件,所以在525版本之上,则可以直接注册DOMContentLoaded事件

    3. 因为DOMContentLoaded时间最早其实是firefox私有事件,而其他浏览才开始引入的,所以对火狐浏览器可以直接使用该事件

最新文章

  1. 还原MySql数据库失败:max_allowed_packet 设置过小导致记录写入失败
  2. Java多线程开发系列之三:线程这一辈子(线程的生命周期)
  3. [Android] 深入浅出Android App耗电量统计
  4. 使用newLISP由SMTPserver发送电子邮件
  5. leetcode 刷题(2)--- 两数相加
  6. SpringSecurity整合JWT
  7. [译]ABP vNext介绍
  8. delphi ADOQuery 开启本地缓存
  9. _itemmod_day_limit
  10. 常见hash原理
  11. CentOS压力测试 ab 命令安装与使用
  12. Linux查看系统cpu个数、核心书、线程数
  13. who am i ?
  14. ARM 内核
  15. 浅析VS2010反汇编
  16. Asp.net之数组应用
  17. 001.linux的基础优化(期中架构方面的优化)
  18. git 上传项目到分支
  19. 从头认识java-14.4 Java提供的数组的有用功能(2)
  20. [LeetCode]3. Longest Substring Without Repeating Characters无重复字符的最长子串

热门文章

  1. Farseer.net轻量级开源框架 入门篇:修改数据详解
  2. Zynq7000系列之芯片引脚功能综述
  3. 【转】非常好的Java反射例子
  4. MySQL的基本概念与操作
  5. TWaver矢量小试——Android演进路线图
  6. 第四章 模块化React和Redux应用
  7. ORACLE 查看当前用户信息(用户,表视图,索引,表空间,同义词,存储过程,约束条件)
  8. db2记录去重
  9. Linux mpstat-显示各个可用CPU的状态
  10. Python 开发面试题