0 Comments

操作类数组(2)

发布于:2013-06-03  |   作者:广州网站建设  |   已聚集:人围观
操作类数组(2)

3. 添加元素

jQuery还为类数组定义了添加元素的方法,其实现代码如下所示。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. add: function( selector ) {  
  2.     return this.pushStack( jQuery.unique( jQuery.merge(  
  3.         this.get(),  
  4.         typeof selector === "string" ?  
  5.         jQuery( selector ) :  
  6.         jQuery.makeArray( selector )  
  7.     )));  

上面方法能够把与表达式匹配的元素添加到jQuery对象中,类数组的集合也可以被追加进来。

4. 过滤元素

使用add()方法可以把其他元素增加到类数组中来,当然有的时候也需要过滤类数组中不需要的元素。jQuery提供了filter()和not()方法来过滤元素。

filter()方法能够筛选出与指定表达式匹配的元素集合。可以通过该方法来筛选当前jQuery对象的元素,或者是使用逗号分隔的多个表达式。其实现代码如下。

 


  1. filter: function( selector ) {  
  2.     return this.pushStack(  
  3.         jQuery.isFunction( selector ) &&  
  4.         jQuery.grep(this, function(elem, i){  
  5.             return selector.call( elem, i );  
  6.         }) ||  
  7.         jQuery.multiFilter( selector, jQuery.grep(this, function(elem){  
  8.             return elem.nodeType === 1;  
  9.     }) ), "filter", selector );  

filter()方法是jQuery.grep()和jQuery.multiFilter()函数功能的综合,如果参数是函数的话,就采用jQuery.grep()函数来完成,否则采用jQuery.multiFilter()函数进行selector方式的过滤。

jQuery.grep()函数提供了以自定义函数回调的形式来过滤集合中不需要的元素,最后形成需要的数组,与map()函数功能类似。


  1. // 过滤elems中满足callback处理的所有元素,inv参数表示相反操作  
  2. grep : function(elems, callback, inv) {  
  3.     var ret = [];  
  4.     for (var i = 0length = elems.length;i < length; i++)  
  5.     if (!inv != !callback(elems[i], i))  
  6.         ret.push(elems[i]);  
  7.     return ret;  
  8. }, 

jQuery.multiFilter()函数与jQuery.filter()函数的区别不大。multiFilter支持采用符号分隔的selector多表达式方式。其实现代码如下。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. jQuery.multiFilter = function( expr, elems, not ) {  
  2.     if ( not ) {  
  3.         expr = ":not(" + expr + ")";  
  4.     }  
  5.     return Sizzle.matches(expr, elems);  
  6. }; 

jQuery.multiFilter()函数可以作为筛选器,与jQuery.filter()函数一样,selector的多表达式也可以只是筛选器的组合,即以·、#、:、[这四种符号做分隔的表达式。

not()方法也是根据selector来过滤不符合条件的元素,但是not()方法是建立于filter()方法基础之上的,执行效率会更高。其实现代码如下所示。


  1. not: function( selector ) {  
  2.     if ( isSimple.test( selector ) )  
  3.         return this.pushStack( jQuery.multiFilter( selector,  this, true ), "not", selector );  
  4.     else  
  5.         selector = jQuery.multiFilter( selector, this );  
  6.     var isArrayLike = selector.length && selector[selector. length - 1] !== undefined && !selector.nodeType;  
  7.     return this.filter(function() {  
  8.         return isArrayLike ? jQuery.inArray( this, selector )  < 0 : this != selector;  
  9.     });  
标签:
飞机