首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jQuery源码浅谈系列-一部分过滤选择器

2012-08-24 
jQuery源码浅谈系列---部分过滤选择器jQuery源码浅谈系列---部分过滤选择器??? ? ?----今天包含的是我们常

jQuery源码浅谈系列---部分过滤选择器

jQuery源码浅谈系列---部分过滤选择器

?

?? ? ?----今天包含的是我们常用的slice,eq,first,last

?? ? ? ? ? 之所有吧这些放一起,很大程度上因为它们的调用是相似的。

?

1. ? slice(start,[end]) ?返回的是jQuery对象

?

??-----参数说明:

?

?start {Integer} -----开始选取子集的位置。第一个元素是0,如果是负数,则可以从集合的尾部开始?end {Integer} ?----可选,结束选取自己的位置,如果不指定就是本身的结尾。
/*版本取的是1.4.2原理上会调用Array.prototype.slice给内部的api---pushStack做参参数处理上没有在()定义,而是从arguments里面获取*/slice: function(){    return this.pushStack(slice.apply(this,arguments), "slice" ,slice.call(arguments).join(","));}
??? ? ??

?

?

?

2. ? eq(index)

?

?--------获取第N个元素(index从0开始)返回的是jQuery对象

?

?

/*@param i ---index 从0开始@依赖与jquery的slice*/eq: function(i){    //判断i ===-1 那么调用jQuery的slice    return i === -1 ? this.slice(i) : this.slice(i, +i +1);}

?

3. ?first()?

?

?--------获取第一个元素 返回的是jQuery对象

?

?

/*核心思想就是调用eq 传一个index为0的参数*/first: function(){     return this.eq(0);}

?

4. ?last()

?

?------获取最后一个元素

?

?

/*核心思想还是调用jQuery的eq传一个参数index为-1有的人会问为什么是-1 你看看Array的原生的slice从后面查找是不是-1我也写过原生slice的一些文章可以参考*/last: function(){    return this.eq(-1);}

?

?

其实作为外部接口来讲这些很简单和清晰,但是作为这些api实现的底层------pushStack才是核心。

?

/*这边的push是引用原生的Array.prototype.push@param elems@param name   ---如果是slice调用传过来的多是slice@param selector */pushStack : function(elems,name,selector){     //创建一个新的jQuery对象     //当然如果你是一个多版本的研究者你会发现从1.5.1开始这边的代码变了     //var ret = this.constructor();     var ret = jQuery();       //会调用工具类判断参数elems是否是array     if(jQuery.isArray(elems)){          push.apply(ret,elems);     }else{          //如果不是数组的话调用merge的api          //如果不清楚可以看看我的其他的merge的文章          jQuery.merge(ret,elems);     }     //绑定一个属性并赋值this对象给它     ret.prevObject = this;     ret.context = this.context;     if(name === "find"){         ret.selector = this.selector + (this.selector ? " " : "") +selector;     }else if(name){         ret.selector = this.selector + "." +name+ "("+selector+")";     }      return ret;}
?

热点排行