每个jQuery对象都有三个属性,
context
,selector
,prevObject
end方法
return this.prevObject || this.constructor();
pushStack 方法
pushStack = function( elems ) {
var ret = jQuery.merge( this.constructor(), elems );
ret.prevObject = this;
return ret;
}
-
this.constructor
方法指向jQuery
,因此会创建一个新的对象 - 将元素合并到新的jQuery对象上,然后将之前的this绑定到prevObject
内部使用 pushStack 的方法
以
find
为例,还有not
,filter
find = function( selector ) {
var i, ret,
len = this.length,
self = this;
// 即使是 元素,检查是不是属于自己的
// 将属于自己的元素再 使用 pushStack,这样可以创建新的jQuery对象
if ( typeof selector !== "string" ) {
return this.pushStack( jQuery( selector ).filter( function() {
// this 是当前的的 DOM 元素
for ( i = 0; i < len; i++ ) {
// 检查一个元素是另一个元素的后代,container , contained
if ( jQuery.contains( self[ i ], this ) ) {
return true;
}
}
} ) );
}
ret = this.pushStack( [] );
for ( i = 0; i < len; i++ ) {
// jQuery.find = Sizzle
// 参数,selector, context, results, seed
// 内部操作 results 也就是 ret,将符合要求的元素添加到ret上
// 传址
jQuery.find( selector, self[ i ], ret );
}
// 看一下,是集合还是单个元素
return len > 1 ? jQuery.uniqueSort( ret ) : ret;
}
网友评论