Jquery源码分析---jQuery类数组的分析
2010-09-14 13:36:40 来源:WEB开发网该静态方法支持第一个参数的类数组(数组)或对象。是数组就对每个元素进行callback的操作。如果是对象,就是对每个属性值进行callback的操作。这个callback回调函数的格式如下:callback:function(index,value)。Index是索引号,value是数组的index对应的元素或对象的第index个处理的属性。如果使用args参数,那callback回调函数的格式如下:callback:function(args)。Args是给回调函数设定参数。再看一下jQuery对象的each。它的第二个参数args就是采用传入的args直接进行给callback设定参数,而不是默认提集合中index和对应的元素,但执行的次数还是集合的length次。
而Jquery的map函数则是将一组元素转换成其他数组(通过回调函数返回值组成的)
// 将一组元素转换成其他数组 然后根据这个数组构建新的jquery对象。
map : function(callback) {
return this.pushStack(jQuery.map(this, function(elem, i) {
return callback.call(elem, i, elem);
}));
},
这个函数首先通过jQuery.map(this, function(elem, i){}来把this的jQuery对象集合的每个元素当作回调函数的elem的参数传到回调函数中。而这个回调函数又执行实例方法的map : function(callback)中callback函数,也就是jQuery.map中的回调仅仅是传参代理的功能。jQuery.map通过代理的回调来取得转换而成的元素集合。
接下来就是采用pushStack把这集合的元素构建成新的jQuery对象并返回,同时保存原jQuery对象的引用。
看下Map的静态方法:
// 返回对elems每个元素都进行操作的callback函数的返回值的集合。
map : function(elems, callback) {
var ret = [];
for (var i = 0, length = elems.length;i < length; i++) {
var value = callback(elems[i], i);
if (value != null)//说明转换的集合的个数可能少于原来的集合
ret[ret.length] = value;
}
return ret.concat.apply([], ret);//采用array的concat实现
}
Map的静态方法返回每个callback返回的元素组成的数组。
4.3 其它操作
对于Jquery对象的集合操作,还有着一些其它的方法,如判断集合的元素是否满足某一个表达式或条件,满足就返回真。在上面的集合操作中,我们经常把老的集合pushStack。那么又如何取得到进栈的这个老集合呢?
Jquery提供了is方法来完成对集合的元素判断
// 用一个表达式来检查当前选择的元素集合,
//如果其中至少有一个元素符合这个给定的表达式就返回true。
is : function(selector) {
return !!selector && jQuery.multiFilter(selector, this).length > 0;
},
!!可以把任何元素转换成boolean型。开发者经常使用的判断是对class的判断,于是提供了一个便利的操作:
// 检查当前的元素是否含有某个特定的类,如果有,则返回true
hasClass : function(selector) {
return this.is("." + selector);
},
End就是找到上一个jquery对象。
// 回到最近的一个"破坏性"操作之前。即,将匹配的元素列表变为前一次的状态。
end : function() {
return this.prevObject || jQuery([]);
},
文章来源:http://jljlpch.javaeye.com/category/37744
更多精彩
赞助商链接