与.before()一起使用时.end()的行为

时间:2012-07-17 17:40:59

标签: detach jquery jquery-end

在对与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结合的定义行为吗?

1 个答案:

答案 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
    }
}