jquery 中的 ready()方法

无外乎就是简写,最终都是调用的同一个ready(),如:
if ( jQuery.isFunction( selector ) ) {
        return rootjQuery.ready( selector );
}

至于其他写法,看源码可以直接调用非官方API:
$.fn.ready(function () {})
$.prototype.ready(function () {});

原理:

  1. var jQuery = (function (window, undefined) {
  2. var $ = function (selector, content) {
  3.             return new $.fn.init(selector, content);
  4.         },
  5.     readyBound = false,
  6.     readyList = [],
  7.     DOMContentLoaded,
  8.         hasOwnProperty = Object.prototype.hasOwnProperty;
  9. if (window.$ === undefined) window.$ = $;
  10. $.fn = $.prototype = {
  11.         
  12.     ready: function (callback) {
  13.         $.bindReady();
  14.         if ($.isReady) {
  15.             callback.call(document, $);
  16.         } else if (readyList) {
  17.             readyList.push(callback);
  18.         };
  19.         return this;
  20.     }
  21. };
  22. $.fn.init = function (selector, content) {
  23.         if (typeof selector === 'function') return $(document).ready(selector);
  24.         return this;
  25. };
  26. $.fn.init.prototype = $.fn;
  27. // DOM就绪事件
  28. $.isReady = false;
  29. $.ready = function () {
  30.     if (!$.isReady) {
  31.         if (!document.body) return setTimeout($.ready, 13);
  32.         $.isReady = true;
  33.         if (readyList) {
  34.             var fn, i = 0;
  35.             while ((fn = readyList[i++])) {
  36.                 fn.call(document, $);
  37.             };
  38.             readyList = null;
  39.         };
  40.     };
  41. };
  42. $.bindReady = function () {
  43.     if (readyBound) return;
  44.     readyBound = true;
  45.     if (document.readyState === 'complete') {
  46.         return $.ready();
  47.     };
  48.     if (document.addEventListener) {
  49.         document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
  50.         window.addEventListener('load', $.ready, false);
  51.     } else if (document.attachEvent) {
  52.         document.attachEvent('onreadystatechange', DOMContentLoaded);
  53.         window.attachEvent('onload', $.ready);
  54.         var toplevel = false;
  55.         try {
  56.             toplevel = window.frameElement == null;
  57.         } catch (e) {};
  58.         if (document.documentElement.doScroll && toplevel) {
  59.             doScrollCheck();
  60.         };
  61.     };
  62. };
  63. if (document.addEventListener) {
  64.     DOMContentLoaded = function () {
  65.         document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);
  66.         $.ready();
  67.     };
  68. } else if (document.attachEvent) {
  69.     DOMContentLoaded = function () {
  70.         if (document.readyState === 'complete') {
  71.             document.detachEvent('onreadystatechange', DOMContentLoaded);
  72.             $.ready();
  73.         };
  74.     };
  75. };
  76. function doScrollCheck () {
  77.     if ($.isReady) return;
  78.     try {
  79.         document.documentElement.doScroll('left');
  80.     } catch (e) {
  81.         setTimeout(doScrollCheck, 1);
  82.         return;
  83.     };
  84.     $.ready();
  85. };
  86. //-------------end
  87. return $}(window));
复制代码
posted @ 2011-07-21 07:44  同城中人  阅读(160)  评论(0编辑  收藏  举报