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

内容简介:

本书首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jQuery的工作原理有大致的印象;进而通过“构造 jQuery 对象”章节分析了构造函数 jQuery() 的各种用法和内部构造过程;接着详细分析了底层支持模块的源码实现,包括:选择器 Sizzle、异步队列 Deferred、数据缓存 Data、队列 Queue、浏览器功能测试 Support;最后详细分析了功能模块的源码实现,包括:属性操作 Attributes、事件系统 Events、DOM 遍历 Traversing、DOM 操作 Manipulation、样式操作 CSS、异步请求 Ajax、动画 Effects。

本书在分析每个模块时均采用由浅入深的方式,先概述功能、用法、结构和实现原理,然后介绍关键步骤和和分析源码实现。让读者不仅知其然,而且知其所以然。事实上,本书的根本价值在于传达一种通过阅读源码快速成长的方式。无论是前端新人,还是经验丰富的老手,只要是对 Javascript 感兴趣的开发人员,都会从本书中受益。

作者简介:

高云,阿里巴巴资深前端开发工程师(花名墨智),拥有丰富的前端开发经验,擅长 HTML5、CSS、Javascript 等 Web 开发技术和 Java 技术,对Javascript相关技术的应用和实现原理有深入研究和独到见解,曾担任项目经理、前端架构师等职。个人博客 om,开源作品有 om。

资源目录:

第1章 总体架构1

1.1 设计理念1

1.2 总体架构1

1.3 自调用匿名函数4

1.4 总结6

第2章 构造 jQuery 对象6

2.1 构造函数 jQuery()7

2.1.1 jQuery( selector [, context] )7

2.1.2 jQuery( html [, ownerDocument] )、jQuery( html, props )8

2.1.3 jQuery( element )、jQuery( elementArray )9

2.1.4 jQuery( object )9

2.1.5 jQuery( callback )10

2.1.6 jQuery( jQuery object )10

2.1.7 jQuery()10

2.2 总体结构10

2.3 jQuery.fn.init( selector, context, rootjQuery )13

2.3.1 12个分支13

2.3.2 源码分析14

2.3.3 小结24

2.4 jQuery.buildFragment( args, nodes, scripts )24

2.4.1 实现原理24

2.4.2 源码分析25

2.4.3 小结30

2.5 jQuery.clean( elems, context, fragment, scripts )31

2.5.1 实现原理31

2.5.2 源码分析32

2.5.3 小结48

2.6 jQuery.extend()、jQuery.fn.extend()48

2.6.1 如何使用48

2.6.2 源码分析49

2.7 原型属性和方法53

2.7.1 .selector、.jquery、.length、.size()54

2.7.2 .toArray()、.get( [index] )55

2.7.3 .each( function(index, Element) )、jQuery.each( collection, callback(indexInArray, valueOfElement) )56

2.7.4 .map( callback(index, domElement) )、jQuery.map( arrayOrObject, callback( value, indexOrKey ) )59

2.7.5 .pushStack( elements, name, arguments )62

2.7.6 .end()64

2.7.7 .eq( index )、.first()、.last()、.slice( start [, end] )64

2.7.8 .push( valur, … )、.sort( [orderfunc] )、.splice( start,deleteCount, value, … )65

2.7.9 小结66

2.8 静态属性和方法67

2.8.1 jQuery.noConflict( [removeAll] )69

2.8.2 类型检测:jQuery.isFunction( obj )、jQuery.isArray( obj )、jQuery.isWindow( obj )、jQuery.isNumeric( value )、jQuery.type( obj )、jQuery.isPlainObject( object )、jQuery.isEmptyObject( object )70

2.8.3 解析 JSON 和 XML:jQuery.parseJSON( data)、jQuery.parseXML( data )75

2.8.4 jQuery.globalEval( code )81

2.8.5 jQuery.camelCase ( string )82

2.8.6 jQuery.nodeName ( elem, name )83

2.8.7 jQuery.trim( str )84

2.8.8 数组操作方法:jQuery.makeArray( obj )、jQuery.inArray( value, array [, fromIndex] )、jQuery.merge( first, second )、jQuery.grep( array, function(elementOfArray, indexInArray) [, invert] )85

2.8.9 jQuery.guid、jQuery.proxy( function, context )91

2.8.10 jQuery.access( elems, key, value, exec, fn( elem, key, value ), pass )94

2.8.11 jQuery.error( message )、jQuery.noop()、jQuery.now()96

2.8.12 浏览器嗅探:jQuery.uaMatch( ua )、jQuery.browser96

2.8.13 小结98

2.9 总结100

第3章 选择器 Sizzle100

3.1 总体结构101

3.2 选择器表达式104

3.3 设计思路105

3.4 Sizzle( selector, context, results, seed )107

3.5 正则 chunker119

3.6 Sizzle.find( expr, context, isXML )121

3.7 Sizzle.filter( expr, set, inplace, not )124

3.8 Sizzle.selectors.relative129

3.8.1 "+"130

3.8.2 ""132

3.8.3 ""133

3.8.4 "~"134

3.8.5 dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML )135

3.8.6 dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML )136

3.9 Sizzle.selectors138

3.9.1 Sizzle.selectors.order138

3.9.2 Sizzle.selectors.match/leftMatch139

3.9.3 Sizzle.selectors.find151

3.9.4 Sizzle.selectors.preFilter154

3.9.5 Sizzle.selectors.filters162

3.9.6 Sizzle.selectors.setFilters165

3.9.7 Sizzle.selectors.filter166

3.10 工具方法176

3.10.1 Sizzle.uniqueSort( results )176

3.10.2 sortOrder(a, b)177

3.10.3 Sizzle.contains( a, b )182

3.10.4 Sizzle.error( msg )182

3.10.5 Sizzle.getText( elem )183

3.11 便捷方法184

3.11.1 Sizzle.matches( expr, set )184

3.11.2 Sizzle.matchesSelector( node, expr )184

3.12 jQuery 扩展186

3.12.1 暴露 Sizzle 给 jQuery186

3.12.2 .find( selector )186

3.12.3 .has( target )188

3.12.4 .not( selector )、.filter( selecotr )189

3.12.5 .is( selector )191

3.12.6 .closest( selectors, context )193

3.12.7 .index( elem )195

3.12.8 .add( selector, context )196

3.12.9 jQuery.filter( expr, elems, not )197

3.12.10 :animated198

3.12.11 :hidden、:visible199

3.13 总结200

第4章 异步队列 Deferred Object201

4.1 jQuery.Callbacks( flags )202

4.1.1 实现原理和总体结构204

4.1.2 源码分析205

4.1.3 小结219

4.2 jQuery.Deferred( func )220

4.2.1 实现原理和总体结构223

4.2.2 源码分析224

4.2.3 小结232

4.3 jQuery.when( deferreds )232

4.3.1 实现原理234

4.3.2 源码分析234

4.4 异步队列在 jQuery 中的应用237

4.5 总结238

第5章 数据缓存 Data238

5.1 实现原理239

5.1.1 为 DOM 元素附加数据239

5.1.2 为 Javascript 对象附加数据241

5.2 总体结构242

5.3 jQuery.acceptData( elem )244

5.4 jQuery.data( elem, name, data, pvt )、jQuery._data( elem, name, data, pvt )245

5.4.1 如何使用245

5.4.2 源码分析246

5.4.3 jQuery._data( elem, name, data )253

5.4.4 小结254

5.5 .data( key, value )256

5.5.1 如何使用256

5.5.2 源码分析256

5.5.3 小结261

5.6 jQuery.removeData( elem, name, pvt )、.removeData( key )262

5.6.1 如何使用262

5.6.2 源码分析263

5.6.4 小结269

5.7 .removeData( key )270

5.8 jQuery.cleanData( elems )271

5.8.1 应用场景271

5.8.2 源码分析273

5.8.3 小结276

5.9 jQuery.hasData( elem )277

5.10 总结278

第6章 队列 Queue279

6.1 如何使用280

AJAX 队列280

动画队列 + AJAX 队列281

基于 Javascript 对象281

6.2 实现原理282

6.3 总体结构282

6.4 jQuery.queue( elem, type, data )284

6.5 jQuery.dequeue( elem, type )286

6.6 .queue( type, data )288

6.7 .dequeue( type )290

6.8 .delay( time, type )291

6.9 .clearQueue( type )292

6.10 jQuery._mark( elem, type )、jQuery._unmark( force, elem, type )293

6.11 .promise( type, object )295

6.11.1 如何使用295

6.11.2 实现原理296

6.11.3 源码分析297

6.11.4 handleQueueMarkDefer( elem, type, src )299

6.12 总结301

第7章 浏览器功能测试 Support302

第8章 属性操作 Attributes392

第9章 事件系统 Events448

第10章 DOM 遍历 Traversing562

第11章 DOM 操作 Manipulation577

第12章 样式操作 CSS618

第13章 异步请求 Ajax673

第14章 动画 Effects761

资源截图:

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