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

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

 2010-09-14 13:36:40 来源:WEB开发网   
核心提示: 分析not函数,我们首先从参数分析开始,Jquery源码分析---jQuery类数组的分析(7),它支持string的CSSselector表达式,还支持(类)数组这样的集合及dom元素,如Ext.DomQuery中的nodup一样处理,// 判断数组中的元素是否有重复的元素,如果sele

分析not函数,我们首先从参数分析开始,它支持string的CSS selector表达式,还支持(类)数组这样的集合及dom元素。如果selector表达式是class单表达式筛选的话,那就调用jQuery.multiFilter过滤之后直接返回。这个本来是不需要做判断单独处理。但是这样会提高效率,很多时间都是采用单表达的class的形式来进行筛选。

它为什么可以独立返回,而可以不用和this中的元素进行比较?因为.class不会改变this的集合的元素,只是剔除一些元素。而对于像#、:的有些操作是会完成变更返回的集合。这个集合是在this的集合的基础之上新构建的集合,会增加一些元素。有那么就得比较。

多表达式返回的是数组,如果传入的参数是元素或(类)数组,它们会统一起来,然后调用filter(function)的来实现比较。对于数组,就是取this的集合与selector的集合的交集。这样就保证了采用CSS筛选或传入的数组筛选之后的元素一定是this的集合的元素。对于传入的参数是单个的元素,那就直接比较,如果this中有这个元素,就返回这个元素。

可以看出not比filter的适用范围更广,而且使用filiter可能还会有潜在的错误,因为它的CSS selector的返回的元素集合很有可能有的元素不包含在当前的this的集合之中。这在某一些场合是很有用的。但是一般不明白原理的用户会感觉到莫名其妙的错误。在使用中最好还是采用not,而不是filter。

在上一节的add的函数中,我们看到jQuery.unique(),看名字就知道它是对集合的元素进行唯一性处理,也就是集合的元素没有重复的。这个unique只是针对于Dom元素。如Ext.DomQuery中的nodup一样处理。

// 判断数组中的元素是否有重复的元素,返回不重复的所有元素。
  unique : function(array) {
   var ret = [], done = {};
    try {
      for (var i = 0, length = array.length;i < length; i++) {
         var id = jQuery.data(array[i]);
       if (!done[id]) { done[id] = true; ret.push(array[i]);}
      }
    } catch (e) { ret = array;}
    return ret;
}

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

Tags:Jquery 源码 分析

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