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

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

 2010-09-14 13:36:40 来源:WEB开发网   
核心提示: 4.2.3 元素的过滤我们可以把其它的元素增加到类数组中来,那么有的时候也得到把类数组中的不适合的元素剔出类数组,Jquery源码分析---jQuery类数组的分析(5),Jquery对象提供了filter,not来过滤那样不用的元素,// 筛选出与指定表达式匹配的元素集合,!inv在un

4.2.3 元素的过滤

我们可以把其它的元素增加到类数组中来,那么有的时候也得到把类数组中的不适合的元素剔出类数组。Jquery对象提供了filter,not来过滤那样不用的元素。

// 筛选出与指定表达式匹配的元素集合。可以通过函数来筛选当前jQuery对象的
  // 元素,还有通过用逗号分隔多个表达式来筛选
  filter : function(selector) {// grep,multiFilter的综合
    return this.pushStack(jQuery.isFunction(selector)
       && jQuery.grep(this, function(elem, i) {
         return selector.call(elem, i);
       }) || jQuery.multiFilter(selector, this));
  },

filter其实是grep,multiFilter的综合,如果参数是函数的话,就采用jQuery.grep来完成,否则采用jQuery.multiFilter来进行selector方式的过过滤。可以看出参数也只能是Fn,String这两种类型。

jQuery.grep提供了以自定义的函数回调的形式来过集合的不需要的元素,最后形成需要的数组,和map函数有点类似。

// 过滤elems中满足callback处理的所有元素,inv是否相反
  grep : function(elems, callback, inv) {
      var ret = [];  
      for (var i = 0, length = elems.length;i < length; i++)
       if (!inv != !callback(elems[i], i))
         ret.push(elems[i]);
      return ret;
    },

代码中!inv != !callback(elems[i], i)这一句比较难理解。它的意义是如果显示指定inv==true。那么callback就得返回false才是符合条件。这里采用三个!就是为了处理这种默认的情况。!inv在undefined,””,false,null,0的时候都会为真,而!callback的返回值如果也是这五种之一的情况也会为真。而它们之间有一个!=,说明不能同时为真为假时才执行ret.push(elems[i]);

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

Tags:Jquery 源码 分析

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