Jquery源码分析---jQuery类数组的分析
2010-09-14 13:36:40 来源:WEB开发网对于元素的定位,jquery提供了index方法:
/ 找到elem在本jquery对象的位置(index)
index : function(elem) {
var ret = -1;
return jQuery.inArray( // 如是jQuery对象就取第一个元素
elem && elem.jquery ? elem[0] : elem, this);
},
// 判断elem元素在array中的位置(index) 静态方法
inArray : function(elem, array) {
for (var i = 0, length = array.length;i < length; i++)
// Use === because on IE, window == document
if (array[i] === elem)
return i;
return -1;
},
inArray是jQuery的静态方法,而index是通过调用inArray来实现其定位的功能。Index的函数支持的参数可以是jQuery对象或Dom元素,而inArray则是实用方法,支持任何的元素。
4.2.2元素的复制及追加
Jquery提供了如数组中slice复制的功能的方法,还提供类似concat的静态方法merge。Slice是通过Array中slice来实现的:
/ 代理数组的slice,同样的操作。
slice : function() {
return this.pushStack(Array.prototype.slice.apply(this, arguments));
},
它返回生成新的jQuery对象。这个对象的集合就是要复制后的集合。对于merge,它是静态方法,实现把第二个元素追加到第一个参数的数组中。
// 把second 元素追加到first的数组中。
merge : function(first, second) {
// We have to loop this way because IE & Opera overwrite the length
// expando of getElementsByTagName
var i = 0, elem, pos = first.length;
// Also, we need to make sure that the correct elements are being
// returned (IE returns comment nodes in a '*' query)
if (jQuery.browser.msie) {
while (elem = second[i++])
if (elem.nodeType != 8)
first[pos++] = elem;
} else
while (elem = second[i++])
first[pos++] = elem;
return first;
},
// 把与表达式匹配的元素添加到jQuery对象中。array(-like)的集合也可以追加进来
add : function(selector) {
return this.pushStack(jQuery.unique(jQuery.merge(this.get(),
typeof selector == 'string' ? jQuery(selector) : jQuery
.makeArray(selector))));
},
// 把先前jQuery对象的所有元素加到当前的jQuery对象之中
andSelf : function() {
return this.add(this.prevObject);
},
更多精彩
赞助商链接