没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1 /*
2 *
说明
:
3 *
本源代码的中文注释乃
Auscar
lin
呕心沥血所作
.
旨在促进
jQuery
的传播以及向广大
jQuery
爱好者提供一个进阶
4 *
的途径
,
以让各位更加深入地了解
jQuery,
学习其中有用的技术
,
从而为振兴中华
J
S
出一份绵薄之力
...(
说大了
...)
5 *
6 *
本文件保留了
jQuery
代码原来的英文注释
,
个别语句我在其旁列出了尝试性的翻
译
(
并标明这是翻译
).
水平有限希望读者能斟酌
.
7 *
另外
,
本中文注释不是简单将原文翻译
(jQuery
作者那少得可怜的注释根本不足以
让我们读通
jQuery
的源代码
).
8 *
而是尽本人最大的努力将程序的意图以及所涉及的中高级的
JavaScript
程序设计
技术展现给各位读者
,
故文件注释较为详尽
.
9 *
10 *
在注释的书写风格方面
,
采取了比较随意的方式和语气
,
目的在于避免晦涩的说教以及拉近读者与代码之间的距离
,
同时也是为了
11 *
增强大家在阅读代码的趣味性
.
另外
,
本人并不提倡使用中文进行注释
,
但是为了扩大读者群体
,
不得已为之
...
12 *
13 *
见识肤浅
,
不足之处希望指出
.
我也希望有人能理解与支持我的工作
.
如果你觉得我的注释对你有帮助
,
请不要吝惜你的感谢
~
14 *
批评与鼓励还有建议都可以通过以下这个电子邮件地址发送给我
:
15 * auscar@126.com
16 *
17 *
或者登录我的个人网站给我留言
:
18 * http://www.linhuihua.com (
注
:linhuihua
是我的中文名拼音
)
19 *
20 *
又另外
,
本人写的仿
jQuery js
框架
miniQ
即将要跟大家见面
.
21 *
这个框架比
jQuery
短小
,
功能也没有这么强大
.
但它的架构完全仿照
jQuery.
可以说它是
jQuery
架构的一个
DEMO.
22 *
透过它
,
你可以从整体上把握
jQuery
的框架以及所用到的程序技巧和设计模式
.
可
以说它是一个教学用的小框架
.
23 *
24 *
希望能有越来越多的人喜欢上
jQuery,
享受
jQuery!
25 *
26 */
27 /*
28 *
版权声明
:
29 * (1)
本文件中的
JavaScript
代码与英文注释版权归原作者所有
30 * (2)
本文件中的中文注释版权归本人所有
.
请自由下载与传播本文件
,
但请勿用于商业用途
.
31 */
32
33 /*
34 * jQuery 1.2.6 - New Wave Javascript
35 *
36 * Copyright (c) 2008 John Resig (jquery.com)
37 * Dual licensed under the MIT (MIT-LICENSE.txt)
38 * and GPL (GPL-LICENSE.txt) licenses.
39 *
40 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
41 * $Rev: 5685 $
-1-
42 */
43
44
45 /*
46 *
整个
jQuery
代码都定义在一个自运行
(
定义完成之后马上运行
)
的匿名函数的内部
:
47 * (function(){
48 *
49 * //jQuery code runs here
50 *
51 * })();
52 *
53 *
这样
,
这个匿名函数所形成的闭包会保护
jQuery
的代码
,
避免了匿名函数内部的
jQuery
代码与外部之间发生冲突
(
如使用了相同的变量名
)
.
54 *
另外
,
函数自运行也保证了
jQuery
在能在第一时间得到初始化
.
55 */
56 (function(){
57 /*
58 *
写下面两行代码,是出于这样的考虑:
59 *
在多库共存的环境中,很可能会与别人的库使用相同的关键字,那就先把人家的
jQuery
、
$(
如果真的有人用的话
)
保存下来,
60 *
然后再换上自己的。需要的时候再把自己的
jQuery,$
关键字卸掉,恢复人家的代
码对这个两个关键字的使用权
.
调用
jQuery.noConflict
便可恢复
.
61 *
恢复的详细内容
,
请参考
jQuery.noConflict
的中文注释
.
62 */
63 // Map over jQuery in case of overwrite
64 //
保存
jQuery
的关键字
,
免得被重写后没法恢复
.
65 var _jQuery = window.jQuery,
66 // Map over the $ in case of overwrite
67 //
保存
$
的关键字
,
免得被重写后没法恢复
.
68 _$ = window.$;
69
70
71 /*
当前作用域内
(
也就是这个自运行的匿名函数所形成的闭包内
)
、
全局作用域内中的
jQuery
和
$
都是注释下面的这个函数的引用
.
72 *
而这个函数实际上是调用
jQuery.fn.init
来构造一个
jQuery
对象
.
73 *
使用
jQuery
的人可能会奇怪
:
为什么我直接使用
$('#someId')
就能选择到我要的对象
?
怎么
$
就可以用啦
?
$
到底是什么意思
?
这里的代码就能给出一点答案
:
74 *
原来
$
不过是一个
jQuery
构造函数的引用
.
使用
$()
就是调用了下面这个函数
.
75 */
76 /**
77 * jQuery
的构造函数
.
通过
selector
选择器构造并返回一个
jQuery
对象
.
78 * @param {string} selector
79 * @param {Object} context
80 */
81 var jQuery = window.jQuery = window.$ = function( selector, context )
{
82 // The jQuery object is actually just the init constructor
'enhanced'
83 /*
84 *
实际上
,jQuery.fn.init
才是
jQuery
真正的构造函数
.
这里就是
jQuery
美妙世界的入口
.
85 */
-2-
86 return new jQuery.fn.init( selector, context );
87 };
88
89 // A simple way to check for HTML strings or ID strings
90 // (both of which we optimize for)
91 /*
翻译
:
一个检测
HTML
字符串和
ID
字符串的简单方法
.
92 *
说明
:
93 *
以下是一个正则表达式
,
意在快速地检测字符串是不是
HTML string or ID
string
94 */
95 var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
96
97 // Is it a simple selector
98 //
isSimple
是一个简单选择器的正则表达式
.
简单是说选择器字符串里面只有一个
选择器
,
如
:
99 // '#eleID'
就是一个简单的选择器
,
而
:
100 // '#eleID .address'
则是一个复杂
(complex)
选择器
101 isSimple = /^.[^:#\[\.]*$/,
102
103 // Will speed up references to undefined, and allows munging its name.
104 undefined;
105 /*
106 *
我要对以上这个
undefined
进行解释
:
107 * ECMAScript
v3
的规范里面规定了名为
undefined
的全局变量
,
它的初始值就是
undefined.
108 *
但是我们并不确定世界上的任何一个
JavaScript
实现都有全局变量
undefined,
那
么这时我们
109 *
只需要自己声明一个但不给它赋值即可
,
它的值就是
undefined.
110 *
111 *
上面那个
undefined
就是声明了这样的一个变量
.
112 *
113 */
114
115 /*
116 *
下面的对通过
jQuery.prototype
的定义来规划
jQuery
对象的主要行为
.
所有通过构造函数
(
如
jQuery,$)new
出来的
jQuery
对象都继承来自
jQuery.protot
ype
117 *
的属性和方法
.
注意
jQuery.prototype
使用了另外一个别名
:jQuery.fn.
在
jQuery
的代码当中
,
使用
jQuery.fn
来代替
jQuery.prototype,
其实是一样的
.
118 */
119 jQuery.fn = jQuery.prototype = {
120 /**
121 * jQuery
的初始化函数
.
每次
new
一个
jQuery
对象的时候
,
总是首先由这个函数实现初始化
.
122 *
初始化的主要工作是根据选择器
selector
选择到匹配的元素
,
并将这些元素放入
一个
jQuery
称之为
matched element set
的集合当中
,
最后返回这个
jQuery
对象
.
123 *
注意
, jQuery
对象并没有实实在在的一个
"matched element
set"
属性
.
假设我们的新定义了一个
jQuery
对象
:
124 * var jq = new jQuery('a');
125 *
那么页面上的所有
a
标签元素就会以
jq[0],jq[1],jq[2]...,jq[n]
的形式存储到
j
Query
对象
(
即
jq)
当中
. jQuery
把这些匹配到的元素在逻辑上看作是一个
126 *
集合
,
并称之为
"matched element set".
127 *
128 * @param {string} selector -
选择器
.
-3-
以这个字符串指定需要选择的元素
.
129 * @param {Object} context -
选择器的上下文
.
即指明要在一个什么范围之内选择
seletor
所指定的元素
.
130 */
131 init: function( selector, context ) {
132 // Make sure that a selection was provided
133 //
如果没有传入
selector,
那么
docuemnt
就会成为默认的
selector.
没有
selector
就用
document
来
"
凑数
".
让
"matched element set"
里面至少要
134 //
有一个元素
.
135 selector = selector || document;
136
137 /*
138 *
下面要对
selecotr
对象进行进行分类的检查
,
不同类型
,
不同的处理
.
139 * selector
可能的类型如下
:
140 * (1)
直接的一个
Dom
元素类型
141 * (2)
数组类型
142 * (3)
函数
(function)
类型
143 * (4) jQuery
或者其他的类数组对象类型
144 * (5) string
类型
145 * a)
没有
context
的情况
146 * b)
有
context
的情况
147 */
148
149 /*
好了
,
现在就分情况进行处理
*/
150
151 // Handle $(DOMElement)
152 //
是不是
(1) "
直接的一个
Dom
元素类型
"
啊
?
如果是
,
就将这个
Dom
元素直接放入
jQuery
对象的
[0]
属性中
,
设置匹配元素集合的大小为
1,
返回
153 if ( selector.nodeType ) {//
是
Dom
元素就应该有一个
nodeType
154 this[0] = selector;
155 this.length = 1;
156 return this;
157 }
158
159 // Handle HTML strings
160 //
是不是类型
(5) - string
类型
?
161 if ( typeof selector == "string" ) {
162 // Are we dealing with HTML string or an ID?
163 //
翻译
:
我们是否正在处理
HTML
或者
ID
字符串
?
164 var match = quickExpr.exec( selector );
165
166 /*
167 *
通过
match
变量来将
string
类型的情况再区分成两类
:
168 * (1)
是
HTML
字符串或者
ID
字符串的情况
169 * (2)
其他
,
如
'.className', 'tagName'
之类
.
170 */
171
172 // Verify a match, and that no context was specified for
#id
173 //
核对这个匹配
,
还有那些没有为
#id
提供
context
的情况
.
174 if ( match && (match[1] || !context) ) {
175
176 // HANDLE: $(html) -> $(array)
177 //
如果传入的是
HTML:
178 //
那么调用
jQuery.clean
将字符串转化成真正的
DOM
元素然后装在一个数组里面
,
最后返回给
selector
-4-
179 //
这样
selector
最后将变成了
(2)
类型
.
180 if ( match[1] )
181 selector = jQuery.clean( [ match[1] ], context );
//clean
的作用就是将传入的
HTML string
转化成为
DOM
182
//
元素
,
并用一个数组装着
,
最后返回
.
183
184 // HANDLE: $("#id")
185 //
如果传入的是
#id
186 else {
187 /*
如果是
#id,
那就调用
JavaScript
原生的
getElementById
188 *
有些
jQuery
的性能提升方法当中建议尽量使用
id
选择符
,
说这样比较高效
.
从这里可以看到
,
是有道理的
.
189 */
190 var elem = document.getElementById( match[3] );
191
192 // Make sure an element was located
193 //
翻译
:
确保一个元素被定位
.
即能够
get
到一个元素
194 if ( elem ){
195
196 /*
197 *
原本可以直接返回结果了
,
但是由于
IE
和
Opera
有一个小小的
Bug,
因此要处理一下再返回
.
198 */
199
200 // Handle the case where IE and Opera return
items
201 // by name instead of ID
202 // COMP:
翻译
:
处理
IE
和
Opera
会用
name
代替
ID
返回元素的问题
203 if ( elem.id != match[3] )
204
//jQuery()
将会返回一个用
document
生成的
jQuery
对象
205 return jQuery().find( selector );
206
207 // Otherwise, we inject the element directly
into the jQuery object
208 //
好了
,
我们将选择到的元素注入到
jQuery
对象的里
,
最后返回
.
209 return jQuery( elem );
210 }
211 //
如果代码能运行到这里
,
说明
match[3]
并不能让
getElementById
选择到任何元素
,
把
selector
设置成
[],
让后面的代码收拾手尾
212 selector = [];
213 }
214
215
216 }
217
218 // HANDLE: $(expr, [context])
219 // (which is just equivalent to: $(content).find(expr)
220 //
翻译
:
处理
$(expr,[context])
221 // (
这跟
$(content).find(expr)
是一样的
)
222 /*
如果传入的
selector
不是
HTML
字符串或者
ID
字符串
(
如
'.class','div'
之类
),
那
-5-
剩余158页未读,继续阅读
资源评论
jiawei237
- 粉丝: 8
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功