第一部分 总体架构 2
第1章 总体架构 2
1.1设计理念 2
1.2总体架构 2
1.3自调用匿名函数 4
1.4总结 6
第二部分 构造jQuery对象 8
第2章 构造jQuery对象 8
2.1构造函数jQuery() 8
2.1.1 jQuery(selector[,context]) 9
2.1.2 jQuery(html[,ownerDocument])、jQuery(html,props) 9
2.1.3 jQuery(element)、jQuery(elementArray) 10
2.1.4 jQuery(object) 10
2.1.5 jQuery(callback) 11
2.1.6 jQuery(jQuery object) 11
2.1.7 jQuery() 11
2.2总体结构 11
2.3 jQuery.fn.init(selector,context,rootjQuery) 13
2.3.1 12个分支 13
2.3.2源码分析 14
2.3.3小结 21
2.4 jQuery.buildFragment(args,nodes,scripts) 22
2.4.1实现原理 22
2.4.2源码分析 22
2.4.3小结 26
2.5 jQueryclean(elems,context,fragment,scripts) 27
2.5.1实现原理 27
2.5.2源码分析 27
2.5.3小结 39
2.6 jQuery.extend()、jQuery.fn.extend() 40
2.6.1如何使用 40
2.6.2源码分析 40
2.7原型属性和方法 43
2.7.1 .selector、jquery、.length、.size() 44
2.7.2 .toArray()、.get([index]) 45
2.7.3 .each(function(index,Element))、jQuery.each(collection,callback(indexInArray,valueOfElement)) 46
2.7.4 .map(callback(index,domElement))、jQuery.map(arrayOrObject,callback(value,indexOrKey)) 47
2.7.5 .pushStack(elements,name,arguments) 49
2.7.6 .end() 51
2.7.7 .eq(index)、.first()、.last()、.slice(start[,end]) 51
2.7.8 .push(value,…)、.sort([orderfunc])、.splice(start,deleteCount,value,…) 52
2.7.9小结 53
2.8静态属性和方法 54
2.8.1 jQuery.noConflict([removeAll]) 55
2.8.2类型检测:jQuery.isFunction(obj)、jQueryisArray(obj)、jQuery.isWindow(obj)、jQuery.isNumeric(value)、jQuery.type(obj)、jQuery.isPlainObject(object)、jQuery.isEmptyObject(object) 56
2.8.3解析JSON和XML:jQueryparseJSON(data)、jQueryparseXML(data) 60
2.8.4 jQuery.globalEval(code) 65
2.8.5 jQuery.camelCase(string) 65
2.8.6 jQuery.nodeName(elem,name) 66
2.8.7 jQuery.trim(str) 67
2.8.8数组操作方法:jQuery.makeArray(obj)、jQuery.inArray(value,array[,fromIndex])、jQuery.merge(first,second)、jQuery.grep(array,function(elementOfArray,indexInArray)[,invert]) 68
2.8.9 jQuery.guid、jQuey.proxy(function,context) 72
2.8.10 jQuery.access(elems,key,value,exec,fn(elem,key,value),pass) 74
2.8.11 jQuery.error(message)、jQuery.noop()、jQuerynow() 75
2.8.12浏览器嗅探:jQuery.uaMatch(ua)、jQuery.browser 76
2.8.13小结 77
2.9总结 77
第三部分 底层支持模块 80
第3章 选择器Sizzle 80
3.1总体结构 81
3.2选择器表达式 83
3.3设计思路 84
3.4 Sizzle(selector,context,results,seed) 86
3.5正则chunker 94
3.6 Sizzle.find(expr,context,isXML) 94
3.7 Sizzle.filter(expr,set,inplace,not) 99
3.8 Sizzle.selectors.relative 103
3.8.1“+” 105
3.8.2“>” 106
3.8.3“” 108
3.8.4“~” 108
3.8.5 dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML) 109
3.8.6 dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML) 111
3.9 Sizzle.selectors 112
3.9.1 Sizzle.selectors.order 112
3.9.2 Sizzle.selectors.match/leftMatch 113
3.9.3 Sizzle.selectors.find 122
3.9.4 Sizzle.selectors.preFilter 123
3.9.5 Sizzle.selectors.filters 129
3.9.6 Sizzle.selectors.setFilters 132
3.9.7 Sizzle.selectors.filter 133
3.10工具方法 140
3.10.1 Sizzle.uniqueSort(results) 140
3.10.2 sortOrder(a,b) 141
3.10.3 Sizzle.contains(a,b) 144
3.10.4 Sizzle.error(msg) 145
3.10.5 Sizzle.getText(elem) 145
3.11便捷方法 146
3.11.1 Sizzle.matches(expr,set) 146
3.11.2 Sizzle.matchesSelector(node,expr) 146
3.12 jQuery扩展 147
3.12.1暴露Sizzle给jQuery 147
3.12.2 .find(selector) 148
3.12.3 .has(target) 149
3.12.4 .not(selector)、.filter(selector) 150
3.12.5 .is(selector) 152
3.12.6 .closest(selectors,context) 153
3.12.7 .index(elem) 154
3.12.8 .add(selector,context) 155
3.12.9 jQuery.filter(expr,elems,not) 156
3.12.10 :animated 157
3.12.11 hidden、:visible 157
3.13总结 158
第4章 异步队列Deferred Object 160
4.1 jQuery.Callbacks(flags) 161
4.1.1实现原理和总体结构 162
4.1.2源码分析 163
4.1.3小结 174
4.2 jQuery.Deferred(func) 174
4.2.1实现原理和总体结构 176
4.2.2源码分析 177
4.2.3小结 183
4.3 jQuery.when(deferreds) 184
4.3.1实现原理 185
4.3.2源码分析 185
4.4异步队列在jQuery中的应用 187
4.5总结 188
第5章 数据缓存Data 189
5.1实现原理 189
5.1.1为DOM元素附加数据 189
5.1.2为JavaScript对象附加数据 191
5.2总体结构 192
5.3 jQuery.acceptData(elem) 193
5.4 jQuery.data(elem,name,data,pvt)、jQuery._data(elem,name,data,pvt) 194
5.4.1如何使用 194
5.4.2源码分析 194
5.4.3 jQuery._data(elem,name,data) 199
5.4.4小结 201
5.5 .data(key,value) 201
5.5.1如何使用 201
5.5.2源码分析 202
5.5.3小结 206
5.6 jQuery.removeData(elem,name,pvt)、.removeData(key) 207
5.6.1如何使用 207
5.6.2源码分析 207
5.6.3小结 212
5.7 .removeData(key) 213
5.8 jQuery.cleanData(elems) 213
5.8.1应用场景 213
5.8.2源码分析 214
5.8.3小结 217
5.9 jQuery.hasData(elem) 217
5.10总结 218
第6章 队列Queue 219
6.1如何使用 219
6.1.1 Ajax队列 220
6.1.2动画队列+Ajax队列 220
6.1.3基于JavaScript对象 221
6.2实现原理 221
6.3总体结构 222
6.4 jQuery.queue(elem,type,data) 223
6.5 jQuerydequeue(elem,type) 224
6.6 .queue(type,data) 227
6.7 .dequeue(type) 228
6.8 .delay(time,type) 229
6.9 .clearQueue(type) 230
6.10 jQuery._mark(elem,type)、jQuery._unmark(force,elem,type) 230
6.11 .promise(type,object) 232
6.11.1如何使用 232
6.11.2实现原理 233
6.11.3源码分析 233
6.11.4 handleQueueMarkDefer(elem,type,src) 235
6.12总结 237
第7章 浏览器功能测试Support 238
7.1总体结构 238
7.2 DOM测试(15项) 241
7.2.1 leadingWhitespace 241
7.2.2 tbody 242
7.2.3 htmISerialize 243
7.2.4 hrefNormalized 245
7.2.5 checkOn 246
7.2.6 noCloneChecked 248
7.2.7 optSelected 250
7.2.8 optDisabled 251
7.2.9 getSetAttribute 253
7.2.10 deleteExpando 256
7.2.11 enctype 258
7.2.12 html5Clone 259
7.2.13 radioValue 261
7.2.14 checkClone 263
7.2.15appendChecked 264
7.3样式测试(3项) 266
7.3.1 style 266
7.3.2 opacity 268
7.3.3 cssFloat 272
7.4盒模型测试(10项) 273
7.4.1 reliableMarginRight 273
7.4.2 reliableHiddenOffsets 276
7.4.3 boxModel 278
7.4.4 inlineBlockNeedsLayout 280
7.4.5 shrinkWrapBlocks 282
7.4.6 doesNotAddBorder、doesAddBorderForTableAndCells 285
7.4.7 fixedPosition 287
7.4.8 subtractsBorderForOverflowNotVisible 290
7.4.9 doesNotIncludeMarginInBodyOffset 292
7.5事件测试(4项) 294
7.5.1 noCloneEvent 294
7.5.2 submitBubbles、changeBubbles、focusinBubbles 296
7.6 Ajax测试(2项) 298
7.6.1 ajax 298
7.6.2 cors 300
7.7总结 301
第四部分 功能模块 306
第8章 属性操作Attributes 306
8.1总体结构 307
8.2 jQuery.attr(elem,name,value,pass) 308
8.2.1源码分析 308
8.2.2 boolHook 311
8.2.3 nodeHook 313
8.2.4 jQuery.attrHooks 314
8.2.5小结 319
8.3 .attr(name,value) 319
8.4 jQuery.removeAttr(elem,value) 321
8.4.1源码分析 321
8.4.2小结 322
8.5 .removeAttr(name) 323
8.6 jQuery.prop(elem,name,value) 323
8.6.1源码分析 323
8.6.2 jQuery.propHooks 325
8.6.3小结 326
8.7 .prop(name,value) 327
8.8 .removeProp(name) 327
8.9 .addClass(className) 328
8.9.1源码分析 328
8.9.2小结 330
8.10 .removeClass([className]) 330
8.10.1源码分析 331
8.10.2小结 333
8.11 .toggleClass([className][,switch]) 333
8.11.1源码分析 334
8.11.2小结 336
8.12 .hasClass(selector) 336
8.12.1源码分析 336
8.12.2小结 337
8.13 .val([value]) 338
8.13.1源码分析 338
8.13.2 jQuery.valHooks 340
8.13.3小结 343
8.14总结 344
第9章 事件系统Events 346
9.1总体结构 346
9.2实现原理 350
9.3 jQuery事件对象 353
9.3.1构造函数jQuery.Event(src,props) 355
9.3.2原型对象jQuery.Event.prototype 357
9.3.3事件属性修正方法jQuery.event.fix(event) 360
9.4绑定事件 367
9.4.1 .on(events[,selector][,data],handler(eventObject)) 367
9.4.2 jQuery.event.add(elem,types,handler,data,selector) 370
9.5移除事件 379
9.5.1 .off(events[,selector][,handler(eventObject)]) 379
9.5.2 jQuery.event.remove(elem,types,handler,selector,mappedTypes) 382
9.6事件响应 388
9.6.1主监听函数 388
9.6.2 jQuery.event.dispatch(event) 390
9.7手动触发事件 396
9.7.1 .trigger(eventType[,extraParameters])、.triggerHandler(eventType[,extraParameters]) 396
9.7.2 jQuery.event.trigger(event,data,elem,onlyHandlers) 397
9.8事件修正和模拟jQuery.event.special 406
9.8.1 ready 408
9.8.2 load 408
9.8.3 focus、blur 409
9.8.4 beforeunload 409
9.8.5 mouseenter、mouseleave 410
9.8.6 submit 412
9.8.7 change 413
9.8.8 focusin、focusout 416
9.8.9 jQuery.event.simulate(type,elem,event,bubble) 417
9.9事件便捷方法 418
9.10组合方法 419
9.10.1 .toggle(handler(eventObject),handler(eventObject)[,handler(eventObject)]) 419
9.10.2 .hover(handlerIn(eventObject)[,handlerOut(eventObject)]) 421
9.11 ready事件 421
9.11.1总体结构 421
9.11.2 .ready(handler) 424
9.11.3 jQuery.bindReady() 424
9.11.4 jQuery.holdReady(hold) 427
9.11.5 jQuery.ready(wait) 428
9.12总结 430
第10章 DOM遍历Traversing 433
10.1总体结构 434
10.2遍历函数 435
10.3工具函数 437
10.3.1 jQuery.dir(elem,dir,until) 437
10.3.2 jQuery.nth(cur,result,dir,elem) 439
10.3.3 jQuery.sibling(n,elem) 440
10.4模板函数 441
10.5总结 443
第11章 DOM操作Manipulation 444
11.1总体结构 444
11.2插入元素 445
11.2.1核心方法.domManip(args,table,callback) 445
11.2.2 .append(content[,content]) 451
11.2.3 .prepend(content[,content]) 452
11.2.4 .before(content[,content]) 452
11.2.5 .after(content[,content]) 452
11.2.6 .appendTo(target)、.prependTo(target)、.insertBefore(target)、.insertAfter(target) 453
11.2.7 .html([value]) 454
11.2.8 .text([text]) 458
11.3删除元素 459
11.3.1 .remove(selector,keepData) 459
11.3.2 .empty() 460
11.3.3 .detach(selector) 460
11.4复制元素 461
11.4.1 .clone(dataAndEvents,deepDataAndEvents) 461
11.4.2 jQuery.clone(elem,dataAndEvents,deepDataAndEvents) 461
11.4.3 cloneFixAttributes(src,dest) 465
11.5替换元素 467
11.5.1 .replaceWith(value) 467
11.5.2 .replaceAll(target) 469
11.6包裹元素 469
11.6.1 .wrapAll(html) 469
11.6.2 .wrapInner(html) 470
11.6.3 .wrap(html) 471
11.6.4 .unwrap() 471
11.7总结 472
第12章 样式操作CSS 474
12.1内联样式、计算样式 475
12.1.1总体结构 475
12.1.2 .css(name,value) 476
12.1.3 jQuery.style(elem,name,value,extra) 477
12.1.4 jQuery.css(elem,name,extra) 481
12.1.5 curCSS(elem,name)、getComputedStyle(elem,name)、currentStyle(elem,name) 483
12.1.6 jQuery.cssHooks 486
12.2坐标Offset 492
12.2.1总体结构 492
12.2.2 .offset(options) 493
12.2.3 jQuery.offset.setOffset(elem,options,i) 498
12.2.4 jQuery.offset.bodyOffset(body) 500
12.2.5 .position() 501
12.2.6 .offsetParent() 502
12.2.7 .scrollLeft(val)、.scrollTop(val) 503
12.3尺寸Dimensions 504
12.3.1总体结构 504
12.3.2 getWH(elem,name,extra) 505
12.3.3 .innerHeight()、.innerWidth( 508
12.3.4 .outerHeight(margin)、.outerWidth(margin) 509
12.3.5 .height(size)、.width(size) 509
12.3.6小结 513
12.4总结 513
第13章 异步请求Ajax 516
13.1总体结构 517
13.2 jQuery.ajax(url,options) 519
13.3前置过滤器、请求发送器的初始化和执行 540
13.3.1初始化 540
13.3.2执行 543
13.4前置过滤器 545
13.4.1 json、jsonp 545
13.4.2 script 548
13.4.3小结 549
13.5请求发送器 549
13.5.1 script 549
13.5.2 XMLHttpRequest 552
13.5.3小结 560
13.6数据转换器 561
13.6.1初始化 561
13.6.2执行 562
13.6.3小结 566
13.7 Ajax事件 567
13.8便捷方法 568
13.8.1 jQuery.get(url,data,callback,type)、jQuery.post(url,data,callback,type) 569
13.8.2 jQuery.getJSON(url,data,callback)、jQuery.getScript(url,callback) 569
13.8.3 .load(url,params,callback) 570
13.9工具方法 573
13.9.1 .serialize() 573
13.9.2 jQuery.param(a,traditional) 574
13.9.3 .serializeArray() 577
13.10总结 579
第14章 动画Effects 582
14.1总体结构 583
14.2动画入口 586
14.2.1 .animate(prop,speed,easing,callback) 586
14.2.2 jQuery.speed(speed,easing,fn) 588
14.2.3 doAnimation() 590
14.2.4 jQuery.fx(elem,options,prop) 595
14.2.5 jQuery.fx.prototype.show() 595
14.2.6 jQuery.fx.prototype.hide() 596
14.2.7小结 596
14.3动画执行 597
14.3.1 jQuery.fx.prototype.custom(from,to,unit) 598
14.3.2 jQuery.fx.tick() 599
14.3.3 jQuery.fx.prototype.step(gotoEnd) 600
14.3.4 jQuery.easing 604
14.3.5 jQuery.fx.prototype.update() 604
14.3.6 jQuery.fx.step 605
14.4停止动画.stop(type,clearQueue,gotoEnd) 606
14.5便捷方法 609
14.5.1生成动画样式集genFx(type,num) 609
14.5.2显示隐藏.show/hide/toggle() 610
14.5.3渐显渐隐.fadeIn/fadeOut/fadeTo/fadeToggle() 613
14.5.4滑入滑出.slideDown/slidUp/slideToggle() 614
14.6总结 615