码迷,mamicode.com
首页 > Web开发 > 详细

jquery的isReady方法(DOM是否加载完)

时间:2016-09-02 18:35:55      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

  1 DOMContentLoaded = function() {
  2         if ( document.addEventListener ) {
  3             document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
  4             jQuery.ready();
  5         } else if ( document.readyState === "complete" ) {
  6             // we‘re here because readyState === "complete" in oldIE
  7             // which is good enough for us to call the dom ready!
  8             document.detachEvent( "onreadystatechange", DOMContentLoaded );
  9             jQuery.ready();
 10         }
 11     },
 12 
 13 
 14 ready: function( fn ) {
 15         // Add the callback
 16         jQuery.ready.promise().done( fn );
 17 
 18         return this;
 19     },
 20 
 21 
 22 jQuery.ready.promise = function( obj ) {
 23     if ( !readyList ) {
 24 
 25         readyList = jQuery.Deferred();
 26 
 27         // Catch cases where $(document).ready() is called after the browser event has already occurred.
 28         // we once tried to use readyState "interactive" here, but it caused issues like the one
 29         // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
 30         if ( document.readyState === "complete" ) {
 31             // Handle it asynchronously to allow scripts the opportunity to delay ready
 32             setTimeout( jQuery.ready, 1 );
 33 
 34         // Standards-based browsers support DOMContentLoaded
 35         } else if ( document.addEventListener ) {
 36             // Use the handy event callback
 37             document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
 38 
 39             // A fallback to window.onload, that will always work
 40             window.addEventListener( "load", jQuery.ready, false );
 41 
 42         // If IE event model is used
 43         } else {
 44             // Ensure firing before onload, maybe late but safe also for iframes
 45             document.attachEvent( "onreadystatechange", DOMContentLoaded );
 46 
 47             // A fallback to window.onload, that will always work
 48             window.attachEvent( "onload", jQuery.ready );
 49 
 50             // If IE and not a frame
 51             // continually check to see if the document is ready
 52             var top = false;
 53 
 54             try {
 55                 top = window.frameElement == null && document.documentElement;
 56             } catch(e) {}
 57 
 58             if ( top && top.doScroll ) {
 59                 (function doScrollCheck() {
 60                     if ( !jQuery.isReady ) {
 61 
 62                         try {
 63                             // Use the trick by Diego Perini
 64                             // http://javascript.nwbox.com/IEContentLoaded/
 65                             top.doScroll("left");
 66                         } catch(e) {
 67                             return setTimeout( doScrollCheck, 50 );
 68                         }
 69 
 70                         // and execute any waiting functions
 71                         jQuery.ready();
 72                     }
 73                 })();
 74             }
 75         }
 76     }
 77     return readyList.promise( obj );
 78 };
 79 
 80 
 81 ready: function( wait ) {
 82 
 83         // Abort if there are pending holds or we‘re already ready
 84         if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
 85             return;
 86         }
 87 
 88         // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
 89         if ( !document.body ) {
 90             return setTimeout( jQuery.ready, 1 );
 91         }
 92 
 93         // Remember that the DOM is ready
 94         jQuery.isReady = true;
 95 
 96         // If a normal DOM Ready event fired, decrement, and wait if need be
 97         if ( wait !== true && --jQuery.readyWait > 0 ) {
 98             return;
 99         }
100 
101         // If there are functions bound, to execute
102         readyList.resolveWith( document, [ jQuery ] );
103 
104         // Trigger any bound ready events
105         if ( jQuery.fn.trigger ) {
106             jQuery( document ).trigger("ready").off("ready");
107         }
108     },

 

jquery的isReady方法(DOM是否加载完)

标签:

原文地址:http://www.cnblogs.com/gongshunkai/p/5834361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!