0 Comments

操作类数组(3)

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

5. 映射元素

集合映射是非常实用的工具。jQuery 定义了 each()和map()两个映射方法。each()方法是对集合中每个元素都执行回调函数,而 map()方法还能够收集每个回调函数的返回结果组成一个新的集合。

对于each()方法来说,jQuery实现代码如下所示。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. each: function( callback, args ) {  
  2.     return jQuery.each( this, callback, args );  

然后通过调用jQuery.each()公共函数来实现元素的迭代操作。


  1. //对object中的每个对象都执行callback函数  
  2. //参数args仅仅在内部使用  
  3. each: function( object, callback, args ) {  
  4.     var name, i = 0length = object.length;  
  5.     if ( args ) {  
  6.         if ( length === undefined ) {  
  7.             for ( name in object )  
  8.                 if ( callback.apply( object[ name ], args ) === false )  
  9.                     break;  
  10.                 } else  
  11.                     for ( ; i < length; )  
  12.                         if ( callback.apply( object[ i++ ], args ) === false )  
  13.                             break;  
  14.     //不是类数组的object,对每个属性都进行callback函数的调用  
  15.     } else {  
  16.         if ( length === undefined ) {  
  17.             for ( name in object )  
  18.                 if ( callback.call( object[ name ], name, object[ name ] ) === false )  
  19.                     break;  
  20.             } else  
  21.                 for ( var value = object[0]; i < length && callback.call ( value, i, value ) !== false; value = object[++i] ){}  
  22.     }  
  23.     return object;  

这个公共函数支持第一个参数的类数组(数组)或对象。如果是数组就对每个元素进行callback操作;如果是对象,就对每个属性值进行callback操作。

callback回调函数的语法格式如下。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. callback:function(index,value) 

参数index表示索引号,参数value表示数组中index对应的元素或对象的第index个处理的属性。如果使用参数args,则callback回调函数的语法格式如下。


  1. callback:function(args) 

参数args是给回调函数设定的参数。而对于jQuery对象的each()方法,它的第二个参数args是采用传入的args直接给callback设定参数,而不是默认集合中index和对应的元素,但执行的次数还是集合的length次。

map()方法能够将一组元素转换成其他数组,它是通过回调函数返回值组成的数组。其实现代码如下。


  1. map: function( callback ) {  
  2.     return this.pushStack( jQuery.map(this, function(elem, i){  
  3.         return callback.call( elem, i, elem );  
  4.     }));  
  5. }, 

map()方法将一组元素转换成其他数组,然后根据这个数组构建新的jQuery对象。在该方法中,通过jQuery.map(this, function(elem, i){}语句中this的jQuery对象集合的每个元素当作回调函数中elem的参数传到回调函数中。该回调函数又执行实例方法map()中的callback函数。jQuery.map()通过代理的回调来取得转换而成的元素集合,然后采用pushStack()方法把该集合的元素构建成新的jQuery对象并返回,同时保存原jQuery对象的引用。

map()公共函数的实现代码如下所示。


  1. map: function( elems, callback ) {  
  2.     var ret = [];  
  3.     for ( var i = 0length = elems.length; i < length; i++ ) {  
  4.     var value = callback( elems[ i ], i );  
  5.     if ( value != null )  
  6.         ret[ ret.length ] = value;  
  7.     }  
  8.     return ret.concat.apply( [], ret );  

上面的函数能够返回对elems中每个元素都进行callback函数操作后返回值的集合。

标签:
飞机