中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      jQuery 源碼分析和Ready函數

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

      jQuery 源碼分析和Ready函數

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

        復制代碼 代碼如下:

        // 定義在jQuery.fn.ready

        $(document).ready(handler);

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

        $().ready(handler);

        // 單獨在jQuery對象中處理

        $(handler);

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

        if(jQuery.isFunction(selector) {

        return rootjQuery.ready(selector);

        }

        因此實際上都歸結與一個形式:jQuery.fn.ready(fn)。定義如下:

        復制代碼 代碼如下:

        ready: function(fn) {

        // 綁定事件到DOM上

        jQuery.bindReady();

        // 觸發回調函數

        readyList.done(fn);

        // 返回jQuery對象

        return this;

        }

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

        復制代碼 代碼如下:

        if(readyList) {

        return;

        }

        readyList = jQuery._Deferred();

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

        ###幾個基礎輔助函數

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

        復制代碼 代碼如下:

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

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

        return window.JSON.parse(data);

        }

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

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

        parseXML函數也主要是標準API和IE的封裝。標準API是DOMParser對象。而IE使用的是Microsoft.XMLDOM的 ActiveXObject對象。定義:

        復制代碼 代碼如下:

        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函數把一段腳本加載到全局context中。IE中可以使用window.execScript。其他瀏覽器需要使用eval。因為整個jQuery代碼都是一整個匿名函數,所以當前context是jQuery。主要代碼:

        復制代碼 代碼如下:

        (window.execScript || function(data) {

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

        })(data);

      【jQuery 源碼分析和Ready函數】相關文章:

      淺析jQuery 遍歷函數javascript03-29

      Javascript函數的定義和用法分析03-31

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

      PHP中的排序函數區別分析03-31

      jquery提交按鈕的代碼03-30

      jQuery程序設計03-30

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

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

      jQuery的DOM操作筆記03-29

      主站蜘蛛池模板: 国产人妖av一区二区在线观看| 2022AV一区在线| 国产自在自线午夜精品视频在| 最新日韩精品视频在线| 99久久婷婷国产综合亚洲| 亚洲性无码av在线| a级日本理论片免费观看| 梁平县| 亚洲网站免费看| 国产91久久精品一区二区| 亚洲一区二区在线视频播放| 亚洲AV无码一区二区三区精神| 休宁县| 荥经县| 高台县| 托里县| 天峻县| 白朗县| 留坝县| 2022精品久久久久久中文字幕| av网站在线观看华人免费| 精品亚洲一区二区99| 亚洲精品一区二区在线播放| 亚洲又黄又大又爽毛片| 国产国拍亚洲精品福利| 69堂在线无码视频2020| 国产精品剧情一区二区三区av| 陈巴尔虎旗| 衡水市| 亚洲五月婷婷久久综合| 蜜桃成人午夜激情网站| 国产精品剧情一区二区三区av| 揄拍成人国产精品视频肥熟女| 日韩av一区二区毛片| 亚洲国产免费av网站| 国产人禽杂交18禁网站| 欧洲一级无码AV毛片免费| 成人精品免费av不卡在线观看| 国产精品欧美视频另类专区| 日韩精品一区二区三区中文9| 五月天婷婷一区二区三区久久|