在对与DOM分离的元素调用.before
时,.end
的行为与附加元素的行为不同:
var $div1 = $("div");
console.log($div1.after("foo").end()); // [document]
$div1.detach();
console.log($div1.after("foo").end()); // [<div></div>]
(小提琴:http://jsfiddle.net/R2uc7/2/)
显然,.before
会导致.end
的行为不同,具体取决于要附加或分离的节点。我没有看到逻辑,我不确定我可以依靠什么。
有人可以告诉我.end
与.before
结合的定义行为吗?
答案 0 :(得分:1)
jQuery v1.7.2使用pushStack
来构建新的DOM元素。
pushStack
将项添加到jQuery对象的堆栈中(如图!),end
弹出最后一个,返回堆栈的其余部分(无论剩下的是什么)。
jQuery v1.7.2第5860行:
annotation mine
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery.clean( arguments );
set.push.apply( set, this.toArray() );
return this.pushStack( set, "before", arguments ); //pushStack in use
}
}