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

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

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

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

        這個(gè)功能在 jQuery的文檔中提到了三種等價(jià)的形式:

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

        // 定義在jQuery.fn.ready

        $(document).ready(handler);

        // 和上一個(gè)是同一個(gè),不推薦

        $().ready(handler);

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

        $(handler);

        // 以上這個(gè)形式的定義:

        if(jQuery.isFunction(selector) {

        return rootjQuery.ready(selector);

        }

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

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

        ready: function(fn) {

        // 綁定事件到DOM上

        jQuery.bindReady();

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

        readyList.done(fn);

        // 返回jQuery對(duì)象

        return this;

        }

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

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

        if(readyList) {

        return;

        }

        readyList = jQuery._Deferred();

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

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

        在543行開始,定義了幾個(gè)值得注意的輔助函數(shù):parseJSON,parseXML和globalEval。parseJSON把一個(gè)字符串變成JSON對(duì)象。我們一般使用的是eval。parseJSON封裝了這個(gè)操作,但是eval被當(dāng)作了最后手段。因?yàn)樽钚翵avaScript標(biāo)準(zhǔn)中加入了JSON序列化和反序列化的API。如果瀏覽器支持這個(gè)標(biāo)準(zhǔn),則這兩個(gè)API是在JS引擎中用Native Code實(shí)現(xiàn)的,效率肯定比eval高很多。目前來看,Chrome和Firefox4都支持這個(gè)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對(duì)象。而IE使用的是Microsoft.XMLDOM的 ActiveXObject對(duì)象。定義:

        復(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。因?yàn)檎麄(gè)jQuery代碼都是一整個(gè)匿名函數(shù),所以當(dāng)前context是jQuery。主要代碼:

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

        (window.execScript || function(data) {

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

        })(data);

      【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è)計(jì)03-30

      jquery之超簡(jiǎn)單的div顯示和隱藏特效demo簡(jiǎn)介03-29

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

      jQuery的DOM操作筆記03-29

      主站蜘蛛池模板: 91麻豆精品国产大片免费看| 欧美日韩国产在线成人网| 亚洲欧美久久婷婷爱综合一区天堂| 中文字幕乱码免费人妻av| 北岛玲中文字幕人妻系列| 国产精彩刺激对白视频| 久久精品久久精品亚洲国产av | 日韩精品视频免费久久| 老熟女熟妇嗷嗷叫91| 色播在线永久免费视频网站| 化隆| 日韩人妻无码中文字幕一区| 精品女同免费在线观看| 夫妻一起自拍内射小视频| 弥渡县| 贵德县| 日本草逼视频免费观看| 中文字幕日本一区二区在线观看| 麻豆国产成人AV网| 久久精品国产亚洲av热明星| 久久精品国产88久久综合| 大名县| 海淀区| 日本一区二区三区在线播放| 利津县| 上林县| 松溪县| 婷婷国产亚洲性色av网站| 修武县| 双辽市| 一本色道久久亚洲综合精品蜜桃| 平阴县| 日本亚洲成人中文字幕| 国产一区二区三区视频免费在线 | 修文县| 亚洲区1区3区4区中文字幕码| 午夜无码无遮挡在线视频| 一本久久综合亚洲鲁鲁五月夫| 国产亚洲精品日韩香蕉网| 免费人成黄页网站在线观看国内| 欧美破处在线观看|