有很长一段时间没有更新博客了,近一段时间开始重新梳理知识点和写博客了。重要的事情说三遍,新的博客地址:欢迎访问,新的博客地址:欢迎访问,新的博客地址:欢迎访问。
jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作
jQuery源码整体放在一个匿名函数执行中
(function(window,undefined){//这里是形参
})(window,undefined);//传入实参
**这样写的好处是:**在匿名函数中定义的变量和函数在匿名函数外部都是访问不到的,在匿名函数中提供对外访问的接口
这里把window当做参数传进来是因为window处于作用域的最顶端,它的查找速度是最慢的。
**好处1:**将window作为实参传递给匿名函数的形参,在匿名函数中可以加快window的查找速度
**好处2:**在压缩版本中window作为实参传递给匿名函数的形参e,通过这样传递,我们知道在压缩代码中e就代表了window
传入undefined,是因为在匿名函数外部undefined可能被修改为其他值,将undefined作为参数传进来,在匿名函数中用到undefined了就是用的传进来的值而不会向外查找了。
####jquery##
用来输出相应的版本号:
####constructor##
####jQuery对象转为dom对象##
####parseHTML##
jQuery.parseHTML用来将字符串转化为数组,返回一个数组
####merge##
script type="text/javascript">
$(function(){
var arr1 = ['a','b'];
var arr2 = ['c','d'];
var arr3 = {
0:'a',
1:'b',
length:2
};
//$.merge用来合并数组
console.log($.merge(arr1,arr2));//["a", "b", "c", "d"]
//$.merge也可以用来合并json
//merge在jQuery中可以用来合并json
console.log($.merge(arr3,arr2));//Object {0: "a", 1: "b", 2: "c", 3: "d", length: 4}
});
####正则匹配##
####makeArray###
1
2
3
####pushStack###
pushStack():JQ对象的入栈
栈是后进先出,所以这里span的背景颜色变红
队列是先进先出
end() 进行出栈操作,来返回栈中的前一个状态
pushStack
1111111
222222
1111111
1111111
1111111
1111111
222222
####map###
返回新集合
####eq###
first(就是eq(0))和last(就是eq(-1))方法都是基于eq方法来实现的
1111111
1111111
1111111
1111111
222222
####toArray()###
toArray()方法用来转数组
1
2
3
###jQuery.extend和jQuery.fn.extend###
jQuery.extend 调用的时候,this是指向jQuery对象的(jQuery是函数,也是对象!),所以这里扩展在jQuery上。
而jQuery.fn.extend 调用的时候,this指向fn对象,jQuery.fn 和jQuery.prototype指向同一对象,扩展fn就是扩展jQuery.prototype原型对象。这里增加的是原型方法,也就是对象方法了。
###jQuery.extend()用法###
**Demo1:**这个例子只给jQuery.extend()方法传递了一个对象参数,这样会将该对象的所有属性和方法添加到jQuery对象上。
Demo2:
**Demo3:**深拷贝
一篇不错的博文:jQuery.extend 函数详解
###noConflict()###
jQuery与其他库的防冲突解决
1111111
在jQuery库之前引用$和jQuery
上面代码中在引入jQuery库之前,先将$
和jQuery分别赋值。并在jQuery源码中分别将其值保存在私有变量_$
和_jQuery中。
当我们引入jQuery库之后:
window.jQuery = window.$ = jQuery;
这样一来,之前$
和jQuery的值将被覆盖为jQuery对象。如果不进行冲突处理,将无法访问之前定义的$
和jQuery。当使用jQuery防冲突方法后,用我们之前保存在私有变量_$
和_jQuery中的值重新给$
和jQuery赋值,并将jQuery对象赋值给其他变量。这样一来我们就能够正常访问$
和jQuery了。
jQuery在其他库之后引入
jQuery与其他库的冲突解决
Test-prototype(将被隐藏)
Test-jQuery(将被绑定单击事件)
由于prototype和jQuery中都存在$
引用,而jQuery在prototype之后引入,这样一来会导致prototype中的$
无法使用。所以,这里我们jQuery的防冲突方法,使得jQuery放弃了$
。这样一来,就可以在prototype中正常使用$
了。
注意:
window.jQuery = window.$ = jQuery;
这里虽然jQuery放弃了$
,但是可以使用window.jQuery来使用jQuery对象。
自定义快捷方式
jQuery与其他库的冲突解决
Test-prototype(将被隐藏)
Test-jQuery(将被绑定单击事件)
如果不想给jQuery自定义备用名称,还想使用 而 不 管 其 他 库 的 而不管其他库的 而不管其他库的()方法,同时又不想与其他库相冲突,我们可以这样来解决
jQuery与其他库的冲突解决
Test-prototype(将被隐藏)
Test-jQuery(将被绑定单击事件)
jQuery在其他库之前引入
jQuery与其他库的冲突解决
Test-prototype(将被隐藏)
Test-jQuery(将被绑定单击事件)
相应的源码:
//防止冲突
noConflict: function( deep ) {
if ( window.$ === jQuery ) {
window.$ = _$;//将私有变量_$赋值给对外接口window.$,这里jQuery就放弃了$
}
//当传递参数的时候
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;//将私有变量_jQuery赋值给对外接口window.jQuery,这里jQuery就放弃了jQuery
}
return jQuery;
}
###expando###
expando用来生成一个随机字符串
在数据缓存、事件操作、aJax都用到这个来生成随机字符串
待续。。。