日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jQuery源码阅读3— bulidFragment( )

發布時間:2025/3/17 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery源码阅读3— bulidFragment( ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jQuery的buildFragment函數,主要是將傳入的HTML代碼用document.createDocumentFragment轉變成文檔碎片,具體細節如下圖:

圖片來源于jQuery技術內幕:

jQuery.buildFragment = function( args, nodes, scripts ) {
//args:準備轉換為DOM結構的THML代碼
//nodes:數組,含有DOM元素或者jquery對象,用于修正創建文檔片段DocumentFragment文檔對象
//scripts:存放HTML代碼的script元素
var fragment, cacheable, cacheresults, doc,
first = args[ 0 ];

if ( nodes && nodes[0] ) {doc = nodes[0].ownerDocument || nodes[0];//ownerDocument取節點所在的整個DOM樹//修正nodes里面的參數 }if ( !doc.createDocumentFragment ) {doc = document;//如果不存在createDocumentFragment則用DOM1的方法 }if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&first.charAt(0) === "<" && !rnocache.test( first ) &&(jQuery.support.checkClone || !rchecked.test( first )) &&(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {// rnocache = /<(?:script|object|embed|option|style)/i,// rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,// rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),// 判斷是否符合緩存// 1、 args.length === 1 : args長度大于1,且第一個元素是字符串// 2、 first.length < 512 : 長度小于512字節,太大就不緩存了// 3、 doc === document : doc是當前文檔對象,不緩存其他框架(iframe)// 4、 first.charAt(0) === "<" : HTML代碼以左尖括號開頭,即只緩存DOM元素,不緩存文本節點// 5、不能含有<script>、<object>、<embed>、<option>、<style>// 6、jQuery.support.html5Clone || !rnoshimcache.test( first ) , 可以復制HTML5元素或者HTML代碼中不含有HTML標簽cacheable = true;// 在使用轉換后的DOM元素時,如果cacheable為true,則必須先復制一份再使用,否則可以直接使用cacheresults = jQuery.fragments[ first ];//嘗試從緩存讀數據if ( cacheresults && cacheresults !== 1 ) {fragment = cacheresults;} }if ( !fragment ) {fragment = doc.createDocumentFragment();jQuery.clean( args, doc, fragment, scripts );// jQuery.clean可以將HTML代碼轉換為DOM節點 }if ( cacheable ) {jQuery.fragments[ first ] = cacheresults ? fragment : 1;// 如果符合緩存,則把轉換后的DOM元素放入緩存對象jQuery.fragments中 }return { fragment: fragment, cacheable: cacheable };

};

總結

以上是生活随笔為你收集整理的jQuery源码阅读3— bulidFragment( )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。