jQuery的buildFragment函数,主要是将传入的HTML代码用document.createDocumentFragment转变成文档碎片,具体细节如下图:

图片来源于jQuery技术内幕:

clipboard.png

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( )相关推荐

  1. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  2. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  3. 学习 jQuery 源码整体架构,打造属于自己的 js 类库

    虽然现在基本不怎么使用 jQuery了,但 jQuery流行 10多年的 JS库,还是有必要学习它的源码的.也可以学着打造属于自己的 js类库,求职面试时可以增色不少. 本文章学习的是 v3.4.1版 ...

  4. Mr.J-- jQuery学习笔记(二十四)--剖析jQuery源码--extend

    定义和用法 jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象. 注意:1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略.此时,target就 ...

  5. jQuery 源码解析一:jQuery 类库整体架构设计解析

    如果是做 web 的话,相信都要对 Dom 进行增删查改,那大家都或多或少接触到过 jQuery 类库,其最大特色就是强大的选择器,让开发者脱离原生 JS 一大堆 getElementById.get ...

  6. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: github.com/hanzichi/un- 一.架构的实现 1.1:架构 (f ...

  7. 应用监控CAT之cat-client源码阅读(一)

    CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控.对于及时发现线上问题非常有用.(不知道大家有没有在用) 应用自然是最初级的,用完之后,还想了解下其背后的原理, ...

  8. centos下将vim配置为强大的源码阅读器

    每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译.出现问题,还得重新回到windows端,这个过程太耗 ...

  9. 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking

    该文章阅读的AFNetworking的版本为3.2.0. 这个分类提供了对请求周期进行控制的方法,包括进度监控.成功和失败的回调. 1.接口文件 1.1.属性 /**网络会话管理者对象*/ @prop ...

最新文章

  1. IDEA坑爹跟新的小BUG解决之道
  2. 页面自动刷新html实现
  3. zookeeper原理与使用
  4. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)
  5. Android之使用IDA Pro静态分析so文件
  6. BZOJ 1015 [JSOI2008]星球大战starwar (逆序并查集)
  7. 太赫兹芯片是什么原理_太赫兹微芯片速度可提升100倍 却遭遇研发两大挑战
  8. ELK官方文档收集Kibana监视数据编辑
  9. 学习ASP.NET MVC的资料推荐
  10. 动态显示没有数据时让GridView也能显示表头信息
  11. 解决办法:开机后过很长时间键盘才能用
  12. Bert源代码(二)模型
  13. 炼数成金《数据分析与SAS》课程
  14. ListNode的理解
  15. UWP 制作汉堡菜单及添加滑动手势
  16. python中mod是什么意思_【python中,mod_python到底做了些什么呢?】mod python 教程
  17. 番茄钟怎么调_番茄钟的使用方法与使用体会
  18. 仿抖音写上下滑动切换视频
  19. STM32F103C8T6+ESP-01S+MQTT服务器实现数据上传和接收(一)
  20. ps蒙版工具的概念及使用

热门文章

  1. 集成学习(ensemble learning)(三)
  2. 项目中遇到的几件有趣事
  3. java上机题四取三排列_Java练习题
  4. Ian Thiel:靠这 3 点,实现 30 倍增长,从不盈利到营收 5.5 亿
  5. 使用flexible适配移动端h5页面
  6. 菜鸟学Linux 第007篇笔记 简单命令的使用讲解(文本、时间、目录)
  7. 读书笔记 — Java高并发程序设计 — 第三章 — 锁
  8. Memcached服务器的图形化管理工具
  9. C++语言基础 例程 设计模式简介
  10. 如何自动播放光盘、解决win7电脑不能播放光盘