一般我看源码的tricks,找到core.js,一些精简的库,cmd+J,cmd+K,cmd+0(VSCode);得到方法折叠,然后再一层层展开看结构;
jQuery 阶段性的选择,在那个阶段,解决了那个阶段的问题;
github彻底移除jquery - blog( why | how )
设计理念
回归增强
- Regressive Enhancement
- 为系统的特性设定基线,并应用到较老的设备和浏览器中
dir
- 3.1.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138➜ jquery tree
.
├── AUTHORS.txt
├── LICENSE.txt
├── README.md
├── brower.json
├── dist
│ ├── core.js
│ ├── jquery.js
│ ├── jquery.min.js
│ ├── jquery.min.map
│ ├── jquery.slim.js
│ ├── jquery.slim.min.js
│ └── jquery.slim.min.map
├── external
│ └── sizzle
│ └── dist
│ └── LICENSE.txt
├── package.json
└── src
├── ajax
│ ├── jsonp.js
│ ├── load.js
│ ├── parseXML.js
│ ├── script.js
│ ├── var
│ │ ├── location.js
│ │ ├── nonce.js
│ │ └── rquery.js
│ └── xhr.js
├── ajax.js
├── attributes
│ ├── attr.js
│ ├── classes.js
│ ├── prop.js
│ ├── support.js
│ └── val.js
├── attributes.js
├── callbacks.js
├── core
│ ├── DOMEval.js
│ ├── access.js
│ ├── init.js
│ ├── parseHTML.js
│ ├── ready-no-deferred.js
│ ├── ready.js
│ ├── readyException.js
│ ├── support.js
│ └── var
│ └── rsingleTag.js
├── core.js
├── css
│ ├── addGetHookIf.js
│ ├── adjustCSS.js
│ ├── curCss.js
│ ├── hiddenVisibleSelector.js
│ ├── showHide.js
│ ├── support.js
│ └── var
│ ├── cssExpand.js
│ ├── getStyles.js
│ ├── isHiddenWithinTree.js
│ ├── rmargin.js
│ ├── rnumnonpx.js
│ └── swap.js
├── css.js
├── data
│ ├── Data.js
│ └── var
│ ├── acceptData.js
│ ├── dataPriv.js
│ └── dataUser.js
├── data.js
├── deferred
│ └── exceptionHook.js
├── deferred.js
├── deprecated.js
├── dlimensions.js
├── effects
│ ├── Tween.js
│ └── animatedSelector.js
├── effects.js
├── event
│ ├── ajax.js
│ ├── alias.js
│ ├── focusin.js
│ ├── support.js
│ └── trigger.js
├── event.js
├── exports
│ ├── amd.js
│ └── global.js
├── jquery.js
├── manipulation
│ ├── _evalUrl.js
│ ├── buildFragment.js
│ ├── getAll.js
│ ├── setGlobalEval.js
│ ├── support.js
│ ├── var
│ │ ├── rcheckableType.js
│ │ ├── rscriptType.js
│ │ └── rtagName.js
│ └── wrapMap.js
├── manipulation.js
├── offset.js
├── queue
│ └── delay.js
├── queue.js
├── selector-native.js
├── selector-sizzle.js
├── selector.js
├── serialize.js
├── traversing
│ └── var
│ └── findFilter.js
├── traversing.js
├── var
│ ├── ObjectFunctionString.js
│ ├── arr.js
│ ├── class2type.js
│ ├── concat.js
│ ├── document.js
│ ├── documentElement.js
│ ├── fnToString.js
│ ├── getProto.js
│ ├── hasOwn.js
│ ├── indexOf.js
│ ├── pnum.js
│ ├── push.js
│ ├── rcssNum.js
│ ├── rnotwhile.js
│ ├── slice.js
│ ├── support.js
│ └── toString.js
└── wrap.js
24 directories, 110 files$
$ 本质是个函数
1 | $ |
jQuery在占用$之前,先保存了原来的$,调用jQuery.noConflict()时会把原来保存的变量还原
选择器
- 层级选择器
- 子选择器
- 过滤器
- 表单相关
example
data() 方法向被选元素附加数据,或者从被选元素获取数据。
self.find(‘#xxx tr:last’).data().id = rows.sub_categories[i].id;
self.find(“#xxx”).children().eq(i).data(“id”)
扩展
我们可以扩展jquery来实现自定义方法—— 编写jquery插件
1 | $.fn.testfunc = function() { |
默认值处理: || && (可以这么处理)
编写插件原则:
- 给$.fn绑定函数,实现插件的代码逻辑;
- 插件函数最后要return this,以支持链式调用;
- 插件函数要有默认值,绑定在$.fn.
.defaults上; - 调用时可传入设定值以便覆盖默认值
- 过滤特定元素
事件
- https://api.jquery.com/click/
- click 如果事件处理函数里面有延迟执行,可能会被浏览器拦截
动画
一些jquery的项目
- The No Hassle JavaScript Colorpicker(bgrins.github.io/spectrum/)
basics
module.js
1 | ;(function(){ |
Others
React17:
1 | before17: |
ajax
- https://api.jquery.com/jQuery.ajax/
1
2
3async (default: true)
Type: Boolean
By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done().