0 Comments

操作类数组(1)

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

类数组的操作主要包括元素的定位、查找、复制和删除等。另外,还可以通过迭代器和映射器扩展对类数组的操作功能。注意,由于类数组的操作对象是集合,所以这与类数组包含的DOM元素操作是两个不同的概念。

1. 定位元素

jQuery定义了get()和index()方法用来定位元素,它们是集合操作最基本的方法。另外,jQuery还定义了get(index)和eq(index)方法,以读取指定位置的元素。get(index)方法和eq(index)方法的主要区别如下。

get(index)方法读取集合中的元素,它与直接通过[i]来读取元素的方法是完全相同的。

eq(index)方法克隆集合中的元素,也就是说不修改数组元素。

get()方法的实现如下。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. //获取jQuery对象的第几个DOM元素。无参数时表示全部的DOM元素  
  2. get: function( num ) {  
  3.     return num === undefined?  
  4.     // 返回全部DOM元素的数组  
  5.     Array.prototype.slice.call( this ):  
  6.     // 返回对应位置的DOM元素  
  7.     this[ num ];  

eq()方法的实现如下。


  1. //获取jQuery对象的第几个DOM元素。序号从0算起  
  2. eq : function(i) {  
  3.      //返回指定位置的元素  
  4.      return this.slice(i, +i + 1);  

index()方法的实现如下。


  1. //查找elem在jQuery对象的下标位置(index)  
  2. index: function( elem ) {  
  3.     return jQuery.inArray(  
  4.         //如果参数是jQuery对象,则判断jQuery参数对象中第一个元素在当前jQuery对象中的位置  
  5.         elem && elem.jquery ? elem[0] : elem  
  6.         , this );  

在index()方法中,调用inArray()公共函数判断elem在当前类数组中的下标位置。index()方法支持的参数可以是jQuery对象或者DOM元素,而inArray()函数的参数可以是任何类型的元素。inArray()函数的实现如下。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. //获取指定元素在数组中的下标位置  
  2. inArray: function( elem, array ) {  
  3.     for ( var i = 0length = array.length; i < length; i++ )  
  4.         if ( array[ i ] === elem )  
  5.             return i;  
  6.     //如果不存在指定元素,则返回-1  
  7.     return -1;  

2. 复制元素

jQuery模拟Array的slice()方法也能实现元素的复制功能。其实现代码如下所示。


  1. //模拟数组的slice()方法  
  2. slice: function() {  
  3.     return this.pushStack( Array.prototype.slice.apply( this, arguments ),  
  4.         "slice", Array.prototype.slice.call(arguments).join(",") );  

另外,它还模拟数组的concat()方法定义了一个全局函数merge()。其实现代码如下所示。

广州网站建设,网站建设,广州网页设计,广州网站设计
  1. //模拟数组的concat()方法  
  2. merge: function( first, second ) {  
  3.     // 因为IE和 Opera 浏览器会重写length属性,所以需要先存储length属性值  
  4.     var i = 0, elem, pos = first.length;  
  5.     //兼容IE浏览器  
  6.     if ( !jQuery.support.getAll ) {  
  7.         while ( (elem = second[ i++ ]) != null )  
  8.             if ( elem.nodeType != 8 )  
  9.                 first[ pos++ ] = elem;  
  10.     } else  
  11.         while ( (elem = second[ i++ ]) != null )  
  12.             first[ pos++ ] = elem;  
  13.     return first;  
  14. }, 
标签:
飞机