最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jQuery 源碼分析筆記(2) 變量列表

 更新時間:2011年05月28日 00:51:09   作者:  
在初始化jQuery對象的代碼開始之前聲明了一大堆變量。主要包括:全局變量的備份;處理字符串用的正則表達(dá)式;檢測瀏覽器的正則表達(dá)式;對核心函數(shù)的引用備份。這里略過大部分,只說兩種:全局變量和瀏覽器檢測。
_jQuery = window.jQuery;
_$ = window.$;
這兩個變量是jQuery唯一使用的兩個全局變量。在jQuery.noConflict()函數(shù)中,會把這兩個變量恢復(fù)回去。
對于瀏覽器檢測,jQuery使用的是檢查UserAgent,而沒有使用特性檢測。
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opear)(?:.*version)?[ \/](\w+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
初始化函數(shù)init
jQuery對JS對象的處理比較繞,而最終目的就是把jQuery選擇器得到的結(jié)果變成和數(shù)組差不多的一個對象。有l(wèi)ength,first,last等。因為$("...")就是從DOM樹從選擇一些節(jié)點出來。但是,$還有很多其他功能,比如常用的$(function() { ... })用來頁面加載后初始化執(zhí)行,$("<..>...</...>")來直接得到一個節(jié)點,用來append到DOM樹中。
接下來從93行開始就是很長的一段init函數(shù)。Init: function(selector, context, rootjQuery)
步驟:
1、Selector是非法參數(shù):空字符,null和undefined則直接返回this。即有默認(rèn)屬性的jQuery對象。
2、Selector是DOMElement。即用原生的JS,比如getElementById等得到的元素。那么,相當(dāng)于把原生的DOM對象用$包裝一次。把這個元素放到內(nèi)部數(shù)組的第一個位置,并把length設(shè)置為1。然后返回。
3、特殊優(yōu)化處理$("body")。即document.body元素。
4、Selector是以<開頭,以>結(jié)尾的字符串。那么假定是想用字符串新建一個DOM元素。比如$("<a )。為了安全起見,這里使用了一個正則表達(dá)式來檢查,到底是<...>...</...>形式還是#id的形式。
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/。在quickExpr.exec(selector)后,如果是HTML字符串,那么會得到[match, match, undefined],而#id形式會得到[#id, undefined, id]的結(jié)果。這樣就把字符串區(qū)別開了。
對于HTML字符串,如果只有一個tag,那么直接調(diào)用createElement。否則調(diào)用一個createFragment輔助函數(shù),這個函數(shù)使用createDocumentFragment,然后把所有tag都插進(jìn)去。
createFragment實現(xiàn)在5892行,這里有一個值得注意的地方就是jQuery對于HTML片段做了緩存處理。而且對于不同的瀏覽器和元素有不同的處理,作者寫了大段的注釋說明。歸納起來就是(1)只緩存小于0.5KB的小片段。(2)selected狀態(tài)不緩存。(3)IE6的<object>和<embed>元素不緩存。(4)WebKit不緩存元素的checked屬性。以上這些不緩存的原因是jQuery使用克?。–lone)節(jié)點的方式進(jìn)行緩存,而2-4提到的情況在Clone時會丟失。jQuery使用了正則,或者jQuery.support輔助函數(shù)來進(jìn)行是否緩存的策略判斷。這里先略過。jQuery.support牽扯很多瀏覽器相關(guān)問題。
5、如果在4中檢查到是#id,則直接調(diào)用document.getElementById
6、如果selector是function,則把這個函數(shù)當(dāng)作是document.ready的事件處理函數(shù)
7、剩余的各種情況,比如傳入了context等。統(tǒng)一調(diào)用一個find(selector)來處理。這個函數(shù)以后再議。(5109行,jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; 表明,其他復(fù)雜的selector表達(dá)式都扔給Sizzle項目了)
jQuery基本成員
jQuery被設(shè)計成一個行為和數(shù)組很像的對象。所以需要一些轉(zhuǎn)換方法和基本屬性。
1、jquery:版本號。最簡單的得到版本號的方式:$().jquery
2、length和size():長度。
3、toArray():轉(zhuǎn)換成JS數(shù)組
4、get(num):返回第N個元素。如果傳入null,則直接返回toArray()的結(jié)果。這里返回的就是DOMElement了。
5、pushStack():參見http://api.jquery.com/pushStack/ 。內(nèi)部new了一個新的jQuery對象,然后把elems和selector得到的結(jié)果合并進(jìn)去,然后返回這個新的jQuery對象。這里有個prevObject屬性的設(shè)置,往下看end()函數(shù)。
6、each(callback, args):遍歷數(shù)組內(nèi)的元素。內(nèi)部調(diào)用了$.each Utiltiy。
7、ready(fn):其實和$(function() { })是等價的。
8、eq(i):i允許正負(fù)數(shù)字,而且返回的仍然是jQuery對象,只不過只有一個元素了。其實只是slice的包裝。
9、first()和last():其實就是eq(0)和eq(-1),很簡單的一個包裝。
10、slice():根據(jù)參數(shù)獲得數(shù)組一部分的引用。內(nèi)部使用pushStack實現(xiàn)的。所以返回的也是一個新的jQuery對象。
11、map(callback):對每個元素依次調(diào)用callback。把原來的元素A的數(shù)組映射為元素B的數(shù)組。callback就是元素A->元素B的映射函數(shù)。函數(shù)式編程(FP)里很基礎(chǔ)的一個概念。
12、end(): 參見http://api.jquery.com/end 。這個是返回選擇器的上一個狀態(tài)。返回的是jQuery.prevObject屬性。這個屬性是在pushStack函數(shù)里面設(shè)置的,它在返回新的jQuery對象之前,把這個新對象的prevObject設(shè)置為this。這樣多次pushStack之后就變成了一個鏈表(chain)。而end()就是沿著鏈表往前走一個節(jié)點。經(jīng)過了selector之后,根的prevObject是document。比如$("body div").prevObject就是Document。
extend函數(shù)
在jQuery基本成員之后,所有其他成員都是用extend加上去的。聲明:
jQuery.extend = jQuery.fn.extend = function() { }
把target后面的所有object參數(shù)的屬性全部賦值到target上,如果第一個參數(shù)是boolean值,則用來指定是否深拷貝。然后返回修改過的target(不是新對象,extend函數(shù)直接修改原對象)。

相關(guān)文章

  • jquery中ajax學(xué)習(xí)筆記一

    jquery中ajax學(xué)習(xí)筆記一

    AJAX 指異步 JavaScript 及 XML(Asynchronous JavaScript And XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)
    2011-10-10
  • jquery通過ajax加載一段文本內(nèi)容的方法

    jquery通過ajax加載一段文本內(nèi)容的方法

    這篇文章主要介紹了jquery通過ajax加載一段文本內(nèi)容的方法,是jQuery針對Ajax的靈活應(yīng)用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • JQuery 中幾個類選擇器的簡單使用介紹

    JQuery 中幾個類選擇器的簡單使用介紹

    類選擇器想必很多喜歡jquery的朋友早早就涉及到了吧,它們的使用也應(yīng)該了如指掌了吧,接下來幫大家溫習(xí)下幾個簡單類選擇器的使用方法,感興趣的你可以參考下哈,希望對你有所幫助
    2013-03-03
  • jQuery remove()過濾被刪除的元素(推薦)

    jQuery remove()過濾被刪除的元素(推薦)

    jQuery remove() 方法也可接受一個參數(shù),允許您對被刪元素進(jìn)行過濾。下面通過實例代碼給大家介紹jQuery remove()過濾被刪除的元素,需要的的朋友參考下吧
    2017-07-07
  • jQuery學(xué)習(xí)筆記之回調(diào)函數(shù)

    jQuery學(xué)習(xí)筆記之回調(diào)函數(shù)

    回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù).這篇文章主要介紹了jQuery學(xué)習(xí)筆記之回調(diào)函數(shù)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • jQuery使用$.extend(true,object1, object2);實現(xiàn)深拷貝對象的方法分析

    jQuery使用$.extend(true,object1, object2);實現(xiàn)深拷貝對象的方法分析

    這篇文章主要介紹了jQuery使用$.extend(true,object1, object2);實現(xiàn)深拷貝對象的方法,結(jié)合實例形式分析了jQuery中$.extend(true,object1, object2);進(jìn)行深拷貝操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • 這些年、我收集的JQuery代碼小結(jié)

    這些年、我收集的JQuery代碼小結(jié)

    排版也是個體力活.資源整理自網(wǎng)絡(luò),送給那些沒有送藏的童鞋,如果你已經(jīng)收藏過了,請不要扔磚頭
    2012-08-08
  • jQuery對Select的操作大集合(收藏)

    jQuery對Select的操作大集合(收藏)

    本篇文章主要介紹了jQuery對Select的操作進(jìn)行了詳細(xì)的匯總,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • jQuery命名空間與閉包用法示例

    jQuery命名空間與閉包用法示例

    這篇文章主要介紹了jQuery命名空間與閉包用法,結(jié)合實例形式演示了jQuery中命名空間及閉包的具體使用技巧,需要的朋友可以參考下
    2017-01-01
  • jQuery實現(xiàn)jQuery-form.js實現(xiàn)異步上傳文件

    jQuery實現(xiàn)jQuery-form.js實現(xiàn)異步上傳文件

    jquery.form.js是一個非常強(qiáng)大的用于表單提交的插件。這篇文章主要介紹了jQuery實現(xiàn)jQuery-form.js實現(xiàn)異步上傳文件,有興趣的可以了解一下。
    2017-04-04

最新評論

婺源县| 汉中市| 双柏县| 永昌县| 高邑县| 阿图什市| 凤城市| 泽库县| 黄冈市| 甘洛县| 隆回县| 临湘市| 肇源县| 文成县| 昆山市| 台江县| 浙江省| 达日县| 安徽省| 五家渠市| 岚皋县| 大化| 泾阳县| 哈尔滨市| 车致| 尼勒克县| 汉中市| 旬阳县| 顺平县| 湟中县| 林西县| 新绛县| 泾阳县| 泰兴市| 巴东县| 天门市| 通山县| 疏附县| 翼城县| 郓城县| 绵竹市|