类数组的操作主要包括元素的定位、查找、复制和删除等。另外,还可以通过迭代器和映射器扩展对类数组的操作功能。注意,由于类数组的操作对象是集合,所以这与类数组包含的DOM元素操作是两个不同的概念。
1. 定位元素
jQuery定义了get()和index()方法用来定位元素,它们是集合操作最基本的方法。另外,jQuery还定义了get(index)和eq(index)方法,以读取指定位置的元素。get(index)方法和eq(index)方法的主要区别如下。
get(index)方法读取集合中的元素,它与直接通过[i]来读取元素的方法是完全相同的。
eq(index)方法克隆集合中的元素,也就是说不修改数组元素。
get()方法的实现如下。
广州网站建设,网站建设,广州网页设计,广州网站设计
- //获取jQuery对象的第几个DOM元素。无参数时表示全部的DOM元素
- get: function( num ) {
- return num === undefined?
- // 返回全部DOM元素的数组
- Array.prototype.slice.call( this ):
- // 返回对应位置的DOM元素
- this[ num ];
- }
eq()方法的实现如下。
- //获取jQuery对象的第几个DOM元素。序号从0算起
- eq : function(i) {
- //返回指定位置的元素
- return this.slice(i, +i + 1);
- }
index()方法的实现如下。
- //查找elem在jQuery对象的下标位置(index)
- index: function( elem ) {
- return jQuery.inArray(
- //如果参数是jQuery对象,则判断jQuery参数对象中第一个元素在当前jQuery对象中的位置
- elem && elem.jquery ? elem[0] : elem
- , this );
- }
在index()方法中,调用inArray()公共函数判断elem在当前类数组中的下标位置。index()方法支持的参数可以是jQuery对象或者DOM元素,而inArray()函数的参数可以是任何类型的元素。inArray()函数的实现如下。
广州网站建设,网站建设,广州网页设计,广州网站设计
- //获取指定元素在数组中的下标位置
- inArray: function( elem, array ) {
- for ( var i = 0, length = array.length; i < length; i++ )
- if ( array[ i ] === elem )
- return i;
- //如果不存在指定元素,则返回-1
- return -1;
- }
2. 复制元素
jQuery模拟Array的slice()方法也能实现元素的复制功能。其实现代码如下所示。
- //模拟数组的slice()方法
- slice: function() {
- return this.pushStack( Array.prototype.slice.apply( this, arguments ),
- "slice", Array.prototype.slice.call(arguments).join(",") );
- }
另外,它还模拟数组的concat()方法定义了一个全局函数merge()。其实现代码如下所示。
广州网站建设,网站建设,广州网页设计,广州网站设计
- //模拟数组的concat()方法
- merge: function( first, second ) {
- // 因为IE和 Opera 浏览器会重写length属性,所以需要先存储length属性值
- var i = 0, elem, pos = first.length;
- //兼容IE浏览器
- if ( !jQuery.support.getAll ) {
- while ( (elem = second[ i++ ]) != null )
- if ( elem.nodeType != 8 )
- first[ pos++ ] = elem;
- } else
- while ( (elem = second[ i++ ]) != null )
- first[ pos++ ] = elem;
- return first;
- },



