WEB开发网
开发学院网页设计JavaScript Jquery源码分析---jQuery类数组的分析 阅读

Jquery源码分析---jQuery类数组的分析

 2010-09-14 13:36:40 来源:WEB开发网   
核心提示: 在分析Ext.DomQuery中的nodup时,很长时间都没有弄明白其意思(nodup= noduplicate),Jquery源码分析---jQuery类数组的分析(8),这里nodup的作用是一样的,它对数组中每一个元素都扩展一个属性,prototype中的mothodize是解决这类

在分析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;
    },

上一页  3 4 5 6 7 8 9  下一页

Tags:Jquery 源码 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接