Jquery源码分析---jQuery类数组的分析
2010-09-14 13:36:40 来源:WEB开发网在分析Ext.DomQuery中的nodup时,很长时间都没有弄明白其意思(nodup= noduplicate)。这里nodup的作用是一样的。它对数组中每一个元素都扩展一个属性,设定全局唯一的id标识。因为数组的元素都是对dom元素的引用,判断是否重复,就只要判断元素的扩展的id标识是否重复就可以。重复就不加入结果集。Done就是保存已经加入结果集合的所有id。如果元素的id标识在这个done中就说明已经加入了这个元素,不需要再加。
4.2.4 元素的映射
集合中的元素的映射是功能强大且非常实用的的方法。Juery如其它的集合一样提供了each、map两个映射的函数。Each是对集合中每个元素都执行回调函数。而map还收集每个回调的返回结果组成一个新的集合,看起来仿佛两个集合之间有着callback的关系,采用map名字就能反映其意思。
对于each,jquery提供一个实例方法和静态方法,实例方法调用了jQuery.map()来完成其each的功能。
// 当前jquery对象中每个元素都执行callback(index,elem)函数
each : function(callback, args) {// 返回this
// 其调用了jQuery的静态方法。prototype中的mothodize是解决这类问题的好方法
return jQuery.each(this, callback, args);
},
它通过调用jQuery.each这个静态方法来完成功能的:
// 对object中的每个对象都执行callback函数进行处理。args仅仅内部用
each : function(object, callback, args) {
var name, i = 0, length = object.length;
// 和else的处理差不多,args的传参代替object的属性值
if (args) {
if (length == undefined) {
for (name in object)
if (callback.apply(object[name], args) === false)
break;
} else
for (;i < length;)
if (callback.apply(object[i++], args) === false)
break;
} else {
// 不是array-like的object,对每个属性进行callback函数的调用
if (length == undefined) {
for (name in object)
if (callback.call(object[name], name, object[name]) === false)
break;
} else
// array-like object,采用数组的形式来处理
for (var value = object[0];i < length && callback.call(value, i, value) !== false; value = object[++i]) {}
}
return object;
},
更多精彩
赞助商链接