jquery.ready可以在文档加载后尽快执行对文档的操作

jquery 1.12.4中ready的关键代码

 1 jQuery.ready.promise = function( obj ) {
 2     if ( !readyList ) {
 3
 4         readyList = jQuery.Deferred();
 5
 6         // Catch cases where $(document).ready() is called
 7         // after the browser event has already occurred.
 8         // Support: IE6-10
 9         // Older IE sometimes signals "interactive" too soon
10         if ( document.readyState === "complete" ||
11             ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
12
13             // Handle it asynchronously to allow scripts the opportunity to delay ready
14             window.setTimeout( jQuery.ready );
15
16         // Standards-based browsers support DOMContentLoaded
17         } else if ( document.addEventListener ) {
18
19             // Use the handy event callback
20             document.addEventListener( "DOMContentLoaded", completed );
21
22             // A fallback to window.onload, that will always work
23             window.addEventListener( "load", completed );
24
25         // If IE event model is used
26         } else {
27
28             // Ensure firing before onload, maybe late but safe also for iframes
29             document.attachEvent( "onreadystatechange", completed );
30
31             // A fallback to window.onload, that will always work
32             window.attachEvent( "onload", completed );
33
34             // If IE and not a frame
35             // continually check to see if the document is ready
36             var top = false;
37
38             try {
39                 top = window.frameElement == null && document.documentElement;
40             } catch ( e ) {}
41
42             if ( top && top.doScroll ) {
43                 ( function doScrollCheck() {
44                     if ( !jQuery.isReady ) {
45
46                         try {
47
48                             // Use the trick by Diego Perini
49                             // http://javascript.nwbox.com/IEContentLoaded/
50                             top.doScroll( "left" );
51                         } catch ( e ) {
52                             return window.setTimeout( doScrollCheck, 50 );
53                         }
54
55                         // detach all dom ready events
56                         detach();
57
58                         // and execute any waiting functions
59                         jQuery.ready();
60                     }
61                 } )();
62             }
63         }
64     }
65     return readyList.promise( obj );
66 };

从代码中看到判断页面加载完成且可以操作有下面这几个点:

1.document.readyState

  readyState是一个document的属性,描述document文档加载状态。

  属性值: 

  loading:表示文档正在载入。

  Interactive:文档已经完成加载,且文档已经解析完成,但是像图片,样式表和框架等子资源仍在加载。

  complete:文档和所有的子资源都完成加载。这个状态表示load事件将被触发。

  readystate兼容性问题:

  [1]只支持‘complete’. Opera Presto(欧朋浏览器的Presto引擎)是在load事件之后触发‘complete’(按照在HTML5标准规范这个顺序是错误的)。

  [2] IE9和IE10 有bug,‘interactive‘ 状态可以在文档完成解析之前触发。

  [3] IE4这个属性仅适用于document、embed、img、link、object、script和style对象。

参考:https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState

https://msdn.microsoft.com/zh-cn/library/ms534359(v=vs.85).aspx

https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness

2.DOMContentLoaded

 当初始HTML文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架完成加载。

  兼容性:IE8及更早版本没有。在IE8中,可以使用readystatechange事件来检测DOM文档是否加载完毕。在更早的IE版本中,可以通过每隔一段时间执行一次document.documentElement.doScroll("left")来检测这一状态,因为这条代码在DOM加载完毕之前执行时会抛出错误(throw an error)。(所以检测时要catch)

参考: https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded#Browser_compatibility

 3.doScroll

doScroll在主文档加载完成后才可调用,它的初始化在onload之前。

doScroll从IE11开始不再支持。可以使用scrollLeft或scrollTop。模拟点击一个滚动条组件。scrollbarDown,点击滚动条的向下箭头。scrollbarPageRight,向右移动一屏内容(如果内容超出一屏的话,否则没有效果)。

参考:https://msdn.microsoft.com/en-us/library/ms536414(v=vs.85).aspx

   http://javascript.nwbox.com/IEContentLoaded/

4.onload

  在文档装载完成后会触发domcument的 load 事件。此时,在文档中的所有对象都在DOM中,所有图片,脚本,链接以及子框都完成了加载。

  参考:https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalEventHandlers/onload

     https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument/load

其他参考:

http://w3c.github.io/html/syntax.html#the-end

http://www.cnblogs.com/-simon/p/5889722.html

DOMContentLoaded VS onload VS onreadystatechangehttp://mutongwu.iteye.com/blog/2207626

jQuery 的 ready 函数是如何工作的?http://www.cnblogs.com/haogj/archive/2013/01/15/2861950.html

  

 

时间: 2024-10-22 22:36:12

jquery.ready可以在文档加载后尽快执行对文档的操作的相关文章

【JS教程16】jquery文档加载完再执行

jquery文档加载完再执行 将获取元素的语句写到页面头部,会因为元素还没有加载而出错,jquery提供了ready方法解决这个问题,它的速度比原生的 window.onload 更快. <script type="text/javascript"> $(document).ready(function(){ ...... }); </script> 可以简写为: <script type="text/javascript"> $

js 文档加载完成之后执行 备用

1 //文档加载完成之后执行 2 (function(){ 3 var _globeCallback; 4 window.$$ = function(callback){ 5 _globeCallback = callback; 6 }; 7 function documentReady(){ 8 _globeCallback(); 9 } 10 //document ready --mobile -webkit 11 var listenerDocumentReady = function()

jquery文档加载几种写法,图片加载写法

jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函数. $(window).load(function() { });//调用window对象下的load方法传入一个函数. (function() { })(jQuery)//()()表示立即执行 并且传入jquery = $ 所以之前$也可以替换为jQuery 注意: jquery的ready只是

jQuery文档加载完毕的几种写法

1 <!DOCTYPE html> 2 <HTML lang="zh-CN"> 3 <HEAD> 4 <meta charset="utf-8"> 5 <TITLE>jQuery文档加载完毕的几种写法</TITLE> 6 </HEAD> 7 8 <body style=" overflow-y:scroll;overflow-x:auto;"> 9 &

JS/JQuery 文档加载完成

1. $(function(){...}); 文档树加载完执行的方法:(注意:不包括图片.css.js等文件): 一个页面中可以有多个$(function(){...}); 方法: 两种写法: //第一种 $(document).ready(function(){ ... }) //第二种(第一种的简写) $(function(){ ... }); 2. $(window).onload(function(){...}); 文档树及其所有文件加载完之后执行的方法(所有文件加载完,eg:图片.js

document.ready和onload的区别——JavaScript文档加载完成事件

文章转自:http://blog.csdn.net/kk5595/article/details/5713209 页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成.(可以说:ready 在onload 前加载!!!) 我的理解: 一般样式控制的,比如图片大小控制放在onload 里面加载; 而:jS事件触发的方法,可以在ready 里面加载; 更多内容戳这里:http://blog.

JavaScript文档加载和事件绑定

为了保证网页代码层次清晰,便于管理,一般HTML中只体现网页结构,具体的行为处理通过JS实现,样式则通过CSS文件管理. 在以上原则下通过JS实现行为时,一定要注意文档加载过程中,执行JS代码的时机.页面加载过程有两个事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成.(可以说:ready 在onload 前加载.) (1) 一些待调用函数定义,要在调用前定义. (2) 对于完善网页元素的JS,伴随文档

关于文档加载的方法

怎么排版啊啊啊... 1.首先用的最多的jQuery中有3种针对文档加载的方法 1 $(document).ready(function() { 2 // ...代码... 3 }) //document ready 简写 $(function() { // ...代码... }) $(document).load(function() { // ...代码... }) 其中第二种是第一种的简写方式. .ready和.load区别 先了解DOM文档加载的步骤: (1) 解析HTML结构. (2)

文档加载

页面加载过程有两个事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成.(可以说:ready 在onload 前加载.) (1) 一些待调用函数定义,要在调用前定义. (2) 对于完善网页元素的JS,伴随文档加载执行. (3) 而绑定元素事件响应的JS,则一定要等到相应元素加载后或文档全部加载完成后再执行,否则无法找到元素,当然不可绑定事件. 使用onload 不仅要求文档DOM 树加载完成,还要求文档的