jQuery技術內幕預覽版.pdf3

來源:互聯網
上載者:User

標籤:blog   http   java   io   2014   ar   cti   代碼   

jQuery.fn.init(selector,context,rootjQuery):建構函式 jQuery.fn.init() 負責解析參數 selector 和 context 的類型,並執行相應的邏輯,最

後返回 jQuery.fn.init() 的執行個體,共有12個有效分支

源碼分析

定義jQuery.fn.init(selector,context,rootjQuery)

init:function(selector,context,rootjQuery){

    var match,elem,ret,doc;

  }

參數 selector:可以是任意類型的值,但只有 undefined、DOM 元素、字串、函數、jQuery 對象、普通 JavaScript 對象這幾種類型是有效,其他類型的值也可以接受但

沒有意義

參數 context:可以不傳入,或者傳入 DOM 元素、jQuery 對象、普通 JavaScript 對象
之一

參 數 rootjQuery:包含了 document 對象的 jQuery 對 象, 用 於 document.getElement
ById() 尋找失敗、selector 是選取器運算式且未指定 context、selector 是函數的情況。
rootjQuery 的定義和應用情境的代碼如下所示

參數 selector 可以轉換為 false:例如是 undefined、Null 字元串、null 等,則直接返回 this,此時 this 是空 jQuery 對象,其屬性 length 等於 0

參數 selector 是 DOM 元素:

如果參數 selector 有屬性 nodeType,則認為 selector 是 DOM 元素,手動設定第一個元
素和屬性 context 指向該 DOM 元素、屬性 length 為 1,然後返回包含了該 DOM 元素引用的
jQuery 對象

參數 selector 是字串“body”:

如果參數 selector 是字串“ body”,手動設定屬性 context 指向 document 對象、第一
個元素指向 body元素、屬性 length 為 1,最後返回包含了 body 元素引用的 jQuery 對象

 參數 selector 是其他字串:

如果參數 selector 是其他字串,則先檢測 selector 是 HTML 程式碼還是 #id

第 126 ~ 128 行:如果參數 selector 以“ <”開頭、以“ >”結尾,且長度大於等於 3,
則假設這個字串是 HTML 片段,跳過正則 quickExpr 的檢查。注意這裡僅僅是假設,並不
一定表示它是真正合法的 HTML 程式碼,如“<div></p>”。
第 131 行:否則,用正則 quickExpr 檢測參數 selector 是否是稍微複雜一些的 HTML 代
碼(如“abc<div>”)或 #id,匹配結果存放在數組 match 中。

正則 quickExpr 包含兩個分組,依次匹配 HTML 程式碼和 id。如果匹配成功,則數組
match 的第一個元素為參數 selector,第二個元素為匹配的 HTML 程式碼或 undefined(放到第二位),第三個
元素為匹配的 id 或 undefined(放到第三位)

41 quickExpr = /^(?:[^ # <]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,

(1)參數 selector 是單獨標籤,則調用document.createElement() 建立標籤對應的 DOM元素。

第 135 行:檢測正則 quickExpr 匹配參數 selector 的結果,如果 match[1] 不是 undefined,
即參數 selector 是 HTML 程式碼,或者 match[2] 不是 undefined,即參數 selector 是 #id,並且
未傳入參數 context。

if ( match && (match[1] || match[2] && !context) ) 

如 果 match 不 是 null 且 match[1] 是 undefined,那麼此時 match[2] 必然不是 undefined,
所以對 match[2] 的判斷可以省略。

第 146 ~ 153 行: 如 果 數 組 ret 不 是 null,則認為參數 selector 是 單 獨 標 簽, 調 用
document.createElement() 建立標籤對應的 DOM 元素;如果參數 context 是普通對象,則

jQuery 方法 .attr() 並傳入參數 context,同時把參數 context 中的屬性、事件設定到新建立的
DOM 元素上。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.