• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. jQuery 源碼分析和Ready函數(shù)

        時間:2024-06-28 02:10:16 jQuery 我要投稿
        • 相關(guān)推薦

        jQuery 源碼分析和Ready函數(shù)

          這個功能在 jQuery的文檔中提到了三種等價的形式:

          復(fù)制代碼 代碼如下:

          // 定義在jQuery.fn.ready

          $(document).ready(handler);

          // 和上一個是同一個,不推薦

          $().ready(handler);

          // 單獨(dú)在jQuery對象中處理

          $(handler);

          // 以上這個形式的定義:

          if(jQuery.isFunction(selector) {

          return rootjQuery.ready(selector);

          }

          因此實際上都?xì)w結(jié)與一個形式:jQuery.fn.ready(fn)。定義如下:

          復(fù)制代碼 代碼如下:

          ready: function(fn) {

          // 綁定事件到DOM上

          jQuery.bindReady();

          // 觸發(fā)回調(diào)函數(shù)

          readyList.done(fn);

          // 返回jQuery對象

          return this;

          }

          實際上jQuery內(nèi)部并不僅僅只有一個對fn的引用。這里用到了 Deferred功能。在75行,為jQuery對象定義了readyList成員。而在442行在bindReady函數(shù)中初始化了這個變量:

          復(fù)制代碼 代碼如下:

          if(readyList) {

          return;

          }

          readyList = jQuery._Deferred();

          bindReady函數(shù)除了初始化readyList之外,主要處理了瀏覽器對于綁定事件的區(qū)別。IE使用attachEvent而其他瀏覽器使用addEventHandler。這兩個步驟完成后,ready函數(shù)使用readyList.resolveWith 觸發(fā)回調(diào)函數(shù)。除了這個工作外,ready還處理了holdReady。這個API 的作用是延遲ready事件的回調(diào),主要目的是在ready事件前做點(diǎn)事情。holdReady設(shè)置了一個標(biāo)志位readyWait。當(dāng)這個標(biāo)志位被設(shè)置之后,ready在調(diào)用readyList.resolveWith之前不停地調(diào)用setTimeout(jQuery.ready, 1)。即每隔固定時間就遞歸調(diào)用自己(不知道hold時間久了,js引擎會不會棧溢出),這樣最后被holdReady釋放的時候, setTimeout會沿著調(diào)用棧回來的。為了在這個棧完成之前不觸發(fā)ready回調(diào)函數(shù)。在每次調(diào)用setTimeout的時候,會遞增readyWait變量。用來指示被holdReady函數(shù)延誤了幾次調(diào)用。

          ###幾個基礎(chǔ)輔助函數(shù)

          在543行開始,定義了幾個值得注意的輔助函數(shù):parseJSON,parseXML和globalEval。parseJSON把一個字符串變成JSON對象。我們一般使用的是eval。parseJSON封裝了這個操作,但是eval被當(dāng)作了最后手段。因為最新JavaScript標(biāo)準(zhǔn)中加入了JSON序列化和反序列化的API。如果瀏覽器支持這個標(biāo)準(zhǔn),則這兩個API是在JS引擎中用Native Code實現(xiàn)的,效率肯定比eval高很多。目前來看,Chrome和Firefox4都支持這個API。parseJSON使用如下:

          復(fù)制代碼 代碼如下:

          // 原生JSON API。反序列化是JSON.stringify(object)

          if(window.JSON && window.JSON.parse) {

          return window.JSON.parse(data);

          }

          // ... 大致地檢查一下字符串合法性

          return (new Function("return " + data))();

          parseXML函數(shù)也主要是標(biāo)準(zhǔn)API和IE的封裝。標(biāo)準(zhǔn)API是DOMParser對象。而IE使用的是Microsoft.XMLDOM的 ActiveXObject對象。定義:

          復(fù)制代碼 代碼如下:

          if(window.DOMParser) {

          tmp = new DOMParser();

          xml = tmp.parseFromString(data, "text/xml");

          } else {

          xml = new ActiveXObject("Microsoft.XMLDOM");

          xml.async = "false";

          xml.loadXML(data);

          }

          globalEval函數(shù)把一段腳本加載到全局context中。IE中可以使用window.execScript。其他瀏覽器需要使用eval。因為整個jQuery代碼都是一整個匿名函數(shù),所以當(dāng)前context是jQuery。主要代碼:

          復(fù)制代碼 代碼如下:

          (window.execScript || function(data) {

          window["eval"].call(window, data); // 在window context下運(yùn)行

          })(data);

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【jQuery 源碼分析和Ready函數(shù)】相關(guān)文章:

        淺析jQuery 遍歷函數(shù)javascript03-29

        Javascript函數(shù)的定義和用法分析03-31

        jQuery中parent()和siblings()的問題03-29

        PHP中的排序函數(shù)區(qū)別分析03-31

        jquery提交按鈕的代碼03-30

        jQuery程序設(shè)計03-30

        jquery之超簡單的div顯示和隱藏特效demo簡介03-29

        如何理解jquery事件冒泡03-29

        jQuery的DOM操作筆記03-29

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 日本精品二三区视频在线观看 | 中文字幕一区二区三区精彩视频 | 亚洲专区自拍中文字幕 | 亚洲欧美在线观看品 | 五月天婷婷综合久久 | 中文字制服丝袜字幕在线 |

            jQuery 源碼分析和Ready函數(shù)

              這個功能在 jQuery的文檔中提到了三種等價的形式:

              復(fù)制代碼 代碼如下:

              // 定義在jQuery.fn.ready

              $(document).ready(handler);

              // 和上一個是同一個,不推薦

              $().ready(handler);

              // 單獨(dú)在jQuery對象中處理

              $(handler);

              // 以上這個形式的定義:

              if(jQuery.isFunction(selector) {

              return rootjQuery.ready(selector);

              }

              因此實際上都?xì)w結(jié)與一個形式:jQuery.fn.ready(fn)。定義如下:

              復(fù)制代碼 代碼如下:

              ready: function(fn) {

              // 綁定事件到DOM上

              jQuery.bindReady();

              // 觸發(fā)回調(diào)函數(shù)

              readyList.done(fn);

              // 返回jQuery對象

              return this;

              }

              實際上jQuery內(nèi)部并不僅僅只有一個對fn的引用。這里用到了 Deferred功能。在75行,為jQuery對象定義了readyList成員。而在442行在bindReady函數(shù)中初始化了這個變量:

              復(fù)制代碼 代碼如下:

              if(readyList) {

              return;

              }

              readyList = jQuery._Deferred();

              bindReady函數(shù)除了初始化readyList之外,主要處理了瀏覽器對于綁定事件的區(qū)別。IE使用attachEvent而其他瀏覽器使用addEventHandler。這兩個步驟完成后,ready函數(shù)使用readyList.resolveWith 觸發(fā)回調(diào)函數(shù)。除了這個工作外,ready還處理了holdReady。這個API 的作用是延遲ready事件的回調(diào),主要目的是在ready事件前做點(diǎn)事情。holdReady設(shè)置了一個標(biāo)志位readyWait。當(dāng)這個標(biāo)志位被設(shè)置之后,ready在調(diào)用readyList.resolveWith之前不停地調(diào)用setTimeout(jQuery.ready, 1)。即每隔固定時間就遞歸調(diào)用自己(不知道hold時間久了,js引擎會不會棧溢出),這樣最后被holdReady釋放的時候, setTimeout會沿著調(diào)用棧回來的。為了在這個棧完成之前不觸發(fā)ready回調(diào)函數(shù)。在每次調(diào)用setTimeout的時候,會遞增readyWait變量。用來指示被holdReady函數(shù)延誤了幾次調(diào)用。

              ###幾個基礎(chǔ)輔助函數(shù)

              在543行開始,定義了幾個值得注意的輔助函數(shù):parseJSON,parseXML和globalEval。parseJSON把一個字符串變成JSON對象。我們一般使用的是eval。parseJSON封裝了這個操作,但是eval被當(dāng)作了最后手段。因為最新JavaScript標(biāo)準(zhǔn)中加入了JSON序列化和反序列化的API。如果瀏覽器支持這個標(biāo)準(zhǔn),則這兩個API是在JS引擎中用Native Code實現(xiàn)的,效率肯定比eval高很多。目前來看,Chrome和Firefox4都支持這個API。parseJSON使用如下:

              復(fù)制代碼 代碼如下:

              // 原生JSON API。反序列化是JSON.stringify(object)

              if(window.JSON && window.JSON.parse) {

              return window.JSON.parse(data);

              }

              // ... 大致地檢查一下字符串合法性

              return (new Function("return " + data))();

              parseXML函數(shù)也主要是標(biāo)準(zhǔn)API和IE的封裝。標(biāo)準(zhǔn)API是DOMParser對象。而IE使用的是Microsoft.XMLDOM的 ActiveXObject對象。定義:

              復(fù)制代碼 代碼如下:

              if(window.DOMParser) {

              tmp = new DOMParser();

              xml = tmp.parseFromString(data, "text/xml");

              } else {

              xml = new ActiveXObject("Microsoft.XMLDOM");

              xml.async = "false";

              xml.loadXML(data);

              }

              globalEval函數(shù)把一段腳本加載到全局context中。IE中可以使用window.execScript。其他瀏覽器需要使用eval。因為整個jQuery代碼都是一整個匿名函數(shù),所以當(dāng)前context是jQuery。主要代碼:

              復(fù)制代碼 代碼如下:

              (window.execScript || function(data) {

              window["eval"].call(window, data); // 在window context下運(yùn)行

              })(data);