《jQuery技术内幕 深入解析jQuery架构设计与实现原理》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:高云著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2014
  • ISBN:9787111440826
  • 页数:616 页
图书介绍:本书首先会介绍介绍jQuery的整体架构,剖析jQuery对象的创建过程,以及一些工具函数,让大家对jQuery的工作原理有大致的印象,然后介绍jQuery对象的源码结构,进而系统分析了jQuery的选择器Sizzle、异步队列、数据缓存、队列Queue、事件处理、异步请求AJAX、动画效果等共计15个模块的源码,其中包括每个模块设计理念、整体结构、实现原理、细节、基础知识等,完整地阐述了如何在JavaScript之上实现jQuery,帮助读者了解jQuery的先进设计理念以及各种实现技巧,从而巩固JavaScript基础,并且可在工作中灵活自如地运用jQuery。

第一部分 总体架构 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