pushStack用来做什么?
-
注释解释:返回新的元素集合但保持旧元素的集合---实现链式风格end()方法
<pre class="javascript" name="code">jQuery.fn =jQuery.prototype={
pushStack: function( elems, name, selector ) {
// 初始化一个空的jQuery对象 var ret = jQuery();
// 如果参数elems是数组 则调用jQuery的push方法 将elems的所有元素推进ret集合中
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
} else {
//merge用法 也是用于合并,将elems的所有元素合并进入ret
jQuery.merge( ret, elems );
}
// this表示调用的jQuery对象,如$("p").pushStack()
// this就表示$("p") 这样做为了不丢失$("p")集合,
//这样可以支持链式操作 $("div").find("p").end()==$("div")
// end: function() {
// return this.prevObject || this.constructor(null);
// }
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" ) {
// 修正选择符 比如 $("div").pushStack(elems,"find","p")
//则ret的选择符将变为 selector---->"div p";
ret.selector = this.selector + (this.selector ? " " : "") + selector;
} else if ( name ) {
// 修正选择符 比如 $("div").pushStack(elems,"filter",".wain")
//则ret的选择符将变为 selector---->"div.filter(.wain)";
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
// 返回新结合
return ret;
}
}