jQuery技术内幕电子版4

参数selector是复杂HTML代码

则利用浏览器的innerHTML机制创建DOM元素

第157行:如果HTML代码满足缓存条件,则在使用转换后的DOM元素时,必须先复制一份再使用,否则可以直接使用

第160行:将新创建的DOM元素数组合并到当前jQuery对象中并返回

参数selector是“#id”,且未指定参数context

则调用document.getElementById()查找含有指定id属性的DOM元素

第169~173行:如果所找到元素的属性id值与传入的值不相等,则调用Sizzle查找并返回一个含有选中元素的新jQuery对象。

参数selector是选择器表达式

如果没有指定上下文,则执行rootjQuery.find(selector);如果指定了上下文,且上下文是jQuery对象,则执行context.find(selector);如果指定了上下文,但上下文不是jQuery对象,则执行this.constructor(context).find(selector)

参数selector是函数

第197~199行:如果参数selector是函数,则认为是绑定ready事件。从第198行代码可以看出$(function)是$(document).ready(function)的简写

参数selector是jQuery对象

则认为它是jQuery对象,将会复制它的属性selector和context。

参数selector是任意其他值

如果selector是数组或伪数组(如jQuery对象),则都添加到当前jQuery对象中;如果selector是JavaScript对象,则作为第一个元素放入当前jQuery对象中;如果是其他类型的值,则作为第一个元素放入当前jQuery对象中。最后返回当前jQuery对象。

2.4 jQuery.buildFragment(args, nodes, scripts)

2.4.1 实现原理

方法jQuery.buildFragment(args, nodes, scripts)先创建一个文档片段DocumentFragment,然后调用方法jQuery.clean(el-ems, context, fragment, scripts)将HTML代码转换为DOM元素,并存储在创建的文档片段中。

此外,如果HTML代码符合缓存条件,方法jQuery.build-Fragment()还会把转换后的DOM元素缓存起来,下次(实际上是第三次)转换相同的HTML代码时直接从缓存中读取,不需要重复转换

2.4.2 源码分析

5个步骤:

1)如果HTML代码符合缓存条件,则尝试从缓存对象jQuery.fragments中读取缓存的DOM元素。2)创建文档片段DocumentFragment。3)调用方法jQuery.clean(elems, context, fragment, scripts)将HTML代码转换为DOM元素,并存储在创建的文档片段中。4)如果HTML代码符合缓存条件,则把转换后的DOM元素放入缓存对象jQuery.fragments。5)最后返回文档片段和缓存状态{fragment: fragment,cacheable: cacheable}

第6085行:定义方法jQuery.buildFragment(args, nodes,scripts),它接受3个参数:

参数args:数组,含有待转换为DOM元素的HTML代码

参数nodes:数组,含有文档对象、jQuery对象或DOM元素

参数scripts:数组,用于存放HTML代码中的script元素

先尝试读取nodes[0]的属性ownerDocument并赋值给doc,ownerDocument表示DOM元素所在的文档对象。如果nodes[0].ownerDocument不存在,则假定nodes[0]为文档对象并赋值给doc,但doc可能不是文档对象,,此时需要检查doc.createDocumentFragment是否存在,如果不存在则修正doc为当前文档对象document

尝试从缓存对象jQuery.fragments中读取缓存的DOM元素

满足以下所有条件,才认为符合缓存条件

•数组args的长度为1,且第一个元素是字符串,即数组args中只含有一段HTML代码

•HTML代码的长度小于512(1/2KB),否则可能会导致缓存占用的内存过大。

•文档对象doc是当前文档对象,即只缓存为当前文档创建的DOM元素,不缓存其他框架(iframe)的

•HTML代码以左尖括号开头,即只缓存DOM元素,不缓存文本节点

•HTML代码中不能含有以下标签:<script>、<object>、<embed>、<option>、<style>

•当前浏览器可以正确地复制单选按钮和复选框的选中状态checked,或者HTML代码中的单选按钮和复选按钮没有被选中

•当前浏览器可以正确地复制HTML5元素,或者HTML代码中不含有HTML5标签

如果HTML代码满足缓存条件,则设置变量cacheable为true

第6115~6118行:尝试从缓存对象jQuery.fragments中读取缓存的DOM元素。如果缓存命中,并且缓存值不是1,则表示读取到的是文档片段,赋值给变量fragment,文档片段中包含了缓存的DOM元素

时间: 2025-01-05 17:05:42

jQuery技术内幕电子版4的相关文章

jQuery技术内幕电子版5

4. 转换HTML代码为DOM元素 先创建一个文档片段DocumentFragment,然后调用方法jQuery.clean(elems, context, frag-ment, scripts)将HTML代码转换为DOM元素,并存储在创建的文档片段中. !fragment为true时可能有三种情况: •HTML代码不符合缓存条件. •HTML代码符合缓存条件,但此时是第一次转换,不存在对应的缓存. •HTML代码符合缓存条件,但此时是第二次转换,对应的缓存值是1. 5. 把转换后的DOM元素放

jQuery技术内幕预览版.pdf2

第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数jQuery()时传入的参数不同,创建的jQuery对象的逻辑也会随之不同 jQuery(selector[,context]): 如果传入一个字符串参数,jQuery会检查这个字符串是选择器表达式还是HTML代码.如果是选择器表达式,则遍历文档,查找与之匹配的DOM元素,并创建一个包含了这些DOM

jQuery技术内幕预览版.pdf3

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,ele

JavaScript框架设计 pdf jQuery技术内幕 pdf

jQuery技术内幕  深入解析jQuery架构设计与实现原理 PDF电子书带目录  高清版 JavaScript框架设计  现代魔法指南 PDF电子书带目录 高清版 网络上的都是预览版,这是自制的,如有需要请联系qq:1067728292 10元一本,已然是最低价不讲价.

jquery 技术内幕(1)

jquery特性 1.兼容主流浏览器,支持IE6.0,Chrome,Firefox3.6,safari5.0,opera等 2.独特的链式语法和短小清晰的多功能接口 3.具有高效灵活的CSS 选择器,并且可对CSS选择器拓展: 4.便捷的插件机制 2.1.4 jQuery(object) 示例:var foo = {foo:"bar", hello:"world"}'--->一个javascript对象 --->封装成 jQuery对象 var $foo

跌跌撞撞的看完了《jquery技术内幕》

今年2月20日买的书,今天是5月26,三个月来,除了周末休息一天,如果没有特殊情况,我都会每晚花两个小时看这本书,以及查各种与jquery源码相关的资料.今天总算是跌跌撞撞的看完了,有点小激动,也有点小失望--虽然看完了,但是用两个字概括看完的感受就是:"糊涂"! 其实我并没有真的看完这本书,因为sizzle那块我看了一点就看不下去了,那块确实太麻烦了.miaov出的视频教程中,讲师也承认那块太麻烦,所以暂时避开先不讲. 看完了这么厚一本书(610+页),我想写长篇的评论,现在却写不出

【jquery】 【jQuery技术内幕】阅读笔记 一

jQuery( object ) jquery在构造对象时,除了可以用十分好用的css选择器来查找DOM,还可以传入一个javascript对象来生成一个jquery对象. // JS var foo = {name:"foo",hello:"word"}; var $foo = $(foo); $foo.on("custom",function(){ console.log(this.name +" "+ this.hell

jQuery技术内幕:深入解析jQuery架构设计与实现原理

jQuery源码(jquery-1.7.1.js)的总体结构:(function( window, undefined ) {// 构造jQuery对象   var jQuery = (function() {       var jQuery = function( selector, context ) {               return new jQuery.fn.init( selector, context, rootjQuery );           }       r

jQuery技术内幕之总体架构与初始化函数

总体架构 首先我们来看下在家在jquery的时候发生了什么,jquery的源码最外层的结构为: (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { ... } else { factory( global ); } }(typeof window !== "undefined"