亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery3.0中的buildFragment私有函數詳解

2019-11-20 09:14:19
字體:
來源:轉載
供稿:網友

時隔 3 個月,jQuery 團隊終于發布了 3.0 Alpha 版本。有兩個版本 jQuery compat 3.0 和 jQuery 3.0。

jQuery compat 3.0 對應之前的 1.x, 兼容更多的瀏覽器,對于IE支持到 8.0 版本

jQuery 3.0 對應之前的 2.x,關注更新的瀏覽器,對于IE支持到 9.0 版本

此外, 3.0還增加了對 Yandex 瀏覽器的支持,一款來自俄羅斯的瀏覽器。

下面看下jQuery3.0中的buildFragment。

在 jQuery3.0中,buildFragment 是一個私有函數,用來構建一個包含子節點 fragment 對象。這個 fragment 在 DOM1 中就已經有了,所有瀏覽器都支持。當頻繁操作(添加、插入) DOM 時使用該方法可以提高性能,John resig 做過一個測試及一篇博客。

jQuery3.0 中 buildFragment 只在 domManip 和 jQuery.parseHTML 中使用,domManip 則被 DOM 操作如 append、prepend、before、after 等方法的所依賴。

如下圖

buildFragment 函數有 5 個參數,源碼如下

function buildFragment( elems, context, scripts, selection, ignored ) {var elem, tmp, tag, wrap, contains, j,fragment = context.createDocumentFragment(),nodes = [],i = 0,l = elems.length;for ( ; i < l; i++ ) {elem = elems[ i ];if ( elem || elem === 0 ) {// Add nodes directlyif ( jQuery.type( elem ) === "object" ) {// Support: Android <=4.0 only, PhantomJS 1 only// push.apply(_, arraylike) throws on ancient WebKitjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );// Convert non-html into a text node} else if ( !rhtml.test( elem ) ) {nodes.push( context.createTextNode( elem ) );// Convert html into DOM nodes} else {tmp = tmp || fragment.appendChild( context.createElement( "div" ) );// Deserialize a standard representationtag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();wrap = wrapMap[ tag ] || wrapMap._default;tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];// Descend through wrappers to the right contentj = wrap[ 0 ];while ( j-- ) {tmp = tmp.lastChild;}// Support: Android <=4.0 only, PhantomJS 1 only// push.apply(_, arraylike) throws on ancient WebKitjQuery.merge( nodes, tmp.childNodes );// Remember the top-level containertmp = fragment.firstChild;// Ensure the created nodes are orphaned (#12392)tmp.textContent = "";}}}// Remove wrapper from fragmentfragment.textContent = "";i = 0;while ( ( elem = nodes[ i++ ] ) ) {// Skip elements already in the context collection (trac-4087)if ( selection && jQuery.inArray( elem, selection ) > -1 ) {if ( ignored ) {ignored.push( elem );}continue;}contains = jQuery.contains( elem.ownerDocument, elem );// Append to fragmenttmp = getAll( fragment.appendChild( elem ), "script" );// Preserve script evaluation historyif ( contains ) {setGlobalEval( tmp );}// Capture executablesif ( scripts ) {j = 0;while ( ( elem = tmp[ j++ ] ) ) {if ( rscriptType.test( elem.type || "" ) ) {scripts.push( elem );}}}}return fragment;}

該方法主要執行步驟

通過第二個參數 content 創建 fragment

通過第一個參數 elems 構建 nodes ,將 elems 內元素轉成 DOM 元素存放于數組 nodes 中

將 nodes 里元素循環放入添加到文檔碎片 fragment 上

返回 fragment

重點在第 2 步,構建 nodes,有 3 種情形

elem 是 DOM 元素(根據nodeType判斷),直接放入 nodes 數組中

elem 是字符串且不是 HTML tag,創建文本節點對象(textNode),放入 nodes 數組中

elem 是字符串且是 HTML tag,將其轉成 DOM 元素,放入 nodes 數組中

如圖示

后面的兩個參數需要注意下

1. 最后兩個參數 selection 和 ignored 只在 replaceWith 方法里使用。需要了解的是 replaceWith 只做節點替換,不會替換先前元素的所有數據(Data),比如綁定事件,$.data 都不會被新元素擁有。

2. scripts 參數只在 jQuery.parseHTML 方法里使用(domManip里傳false),當 jQuery.parseHTML 的第三個參數 keepScripts 為 false 時將刪除節點里所有的 script tag

以上所述是小編給大家介紹的jQuery3.0中的buildFragment私有函數詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品69久久| 91av免费观看91av精品在线| 国产91网红主播在线观看| 92国产精品久久久久首页| 欧美性xxxx在线播放| 日韩激情第一页| 少妇av一区二区三区| 免费av一区二区| 国产aⅴ夜夜欢一区二区三区| 91精品国产高清自在线| 国产美女91呻吟求| 国产精品激情av在线播放| 欧美国产日本在线| 国产在线一区二区三区| 青草青草久热精品视频在线网站| 亚洲人成人99网站| 91a在线视频| 欧美黑人狂野猛交老妇| 在线日韩第一页| 国产精品久久久久久久9999| 91精品久久久久久久久| 精品福利视频导航| 国产成人自拍视频在线观看| 91久久国产综合久久91精品网站| 亚洲成人中文字幕| 亚洲国产精品久久久| 欧美性猛交xxxx免费看久久久| 欧美日韩国产综合视频在线观看中文| 欧美大胆在线视频| 国外成人性视频| 欧美激情在线狂野欧美精品| 欧美激情亚洲激情| 国产香蕉97碰碰久久人人| 91国内在线视频| 国产美女扒开尿口久久久| 国内伊人久久久久久网站视频| 日韩精品中文字幕在线观看| 久久精品国产精品亚洲| 日韩电视剧在线观看免费网站| 亚洲片在线资源| 欧美精品www在线观看| 国产香蕉一区二区三区在线视频| 亚洲国产小视频在线观看| 久久久精品在线| 久久久久久久久久久久久久久久久久av| 91产国在线观看动作片喷水| 日本精品久久久| 亚洲网站视频福利| 国产成人久久久精品一区| 黑人巨大精品欧美一区免费视频| 亚洲精品视频在线观看视频| 欧美精品情趣视频| 97久久精品人搡人人玩| 久久精品国产久精国产一老狼| 欧美成人在线免费视频| 亚洲天堂av高清| yw.139尤物在线精品视频| 亚洲成人999| 伊人伊成久久人综合网小说| 日韩中文字幕在线观看| 午夜精品99久久免费| 精品无人区乱码1区2区3区在线| 久久久久久中文| 4k岛国日韩精品**专区| 岛国av一区二区三区| 91精品久久久久久久久中文字幕| 日韩视频永久免费观看| 91精品国产高清自在线| 日韩精品视频免费专区在线播放| 国产精品久久久久久久久久久新郎| 日韩av免费网站| 国产精品777| 欧美激情区在线播放| 91精品久久久久久久久中文字幕| 国产欧美一区二区三区久久| 日韩av网址在线观看| 91麻豆国产精品| 91国产一区在线| 日韩极品精品视频免费观看| 中文字幕日韩综合av| 亚洲色无码播放| 国产精品一区久久久| 日韩美女写真福利在线观看| 91久久精品国产91性色| 免费不卡在线观看av| 中文字幕欧美精品在线| 欧美极度另类性三渗透| 成人午夜一级二级三级| 欧美大肥婆大肥bbbbb| 国产精品ⅴa在线观看h| 日韩极品精品视频免费观看| 久久视频在线视频| 亚洲精品影视在线观看| 91精品在线看| 91免费在线视频| 亚洲第一精品电影| 久久久精品国产网站| 热99精品里视频精品| 亚洲自拍av在线| 日韩成人激情在线| 亚洲精品电影在线| 亚洲欧洲日产国产网站| 久久国产精品电影| 日韩精品在线免费观看| 亚洲最新av在线网站| 亚洲视频国产视频| 国产精品av免费在线观看| 精品视频在线播放色网色视频| 一区二区欧美在线| 欧美午夜女人视频在线| 亚洲男女性事视频| 91综合免费在线| 高清日韩电视剧大全免费播放在线观看| 国产精品精品国产| 亚洲直播在线一区| 欧美精品在线网站| 国内精品久久久久影院 日本资源| www.色综合| 久久91亚洲精品中文字幕| 欧美精品制服第一页| 国产成人av在线播放| 欧美三级免费观看| 日韩精品高清视频| 精品国产一区久久久| 国产精品99久久久久久久久久久久| 久久视频在线看| 亚洲精品aⅴ中文字幕乱码| 97婷婷大伊香蕉精品视频| 日韩免费看的电影电视剧大全| 夜夜嗨av一区二区三区四区| 欧美日韩在线第一页| 色www亚洲国产张柏芝| 中文在线资源观看视频网站免费不卡| 亚洲伊人一本大道中文字幕| 色av中文字幕一区| 欧美性videos高清精品| 欧美日本高清一区| 日韩欧美aⅴ综合网站发布| 国产成人亚洲精品| 精品露脸国产偷人在视频| 久久久久久久国产精品视频| 日韩中文字幕在线免费观看| 成人h视频在线| 国产亚洲欧美aaaa| 久久精品国产69国产精品亚洲| 色99之美女主播在线视频| 亚洲va码欧洲m码| 欧美在线视频一区二区| 国产精品丝袜白浆摸在线| 午夜精品免费视频| 亚洲天堂影视av| 日韩中文综合网| 国产69精品久久久久久| 欧美丰满老妇厨房牲生活| 国产福利视频一区二区| 成人黄色免费片| 国产精品久久久久免费a∨| 懂色av影视一区二区三区| 成人免费网站在线看| 国产精品海角社区在线观看| 日韩中文字幕视频| 国产福利视频一区| 国产欧美一区二区三区在线| 国产精品久久久久av免费|