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

Detach 与.before()一起使用时.end()的行为,detach,jquery,jquery-end,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>] var$div1=$(“div”); console.log($div1.after(“foo

对从DOM分离的元素调用
.before
时,
.end
的行为与对附加元素的行为不同:

var $div1 = $("div");
console.log($div1.after("foo").end());  // [document]
$div1.detach();
console.log($div1.after("foo").end());  // [<div></div>]
var$div1=$(“div”);
console.log($div1.after(“foo”).end());//[文件]
$div1.detach();
console.log($div1.after(“foo”).end());//[]
(小提琴:)

显然,
.before
会导致不同的行为
.end
,具体取决于所连接或分离的节点。我看不出其中的逻辑,也不确定我能依靠什么

有人能告诉我
.end
.before
相结合的定义行为吗?

用于构建新的DOM元素

pushStack
将项添加到jQuery对象的堆栈中(如图所示!),并弹出最后一个项,返回堆栈的其余部分(剩余的部分)


jQuery v1.7.2行#5860:
注释矿山

用于构建新的DOM元素

pushStack
将项添加到jQuery对象的堆栈中(如图所示!),并弹出最后一个项,返回堆栈的其余部分(剩余的部分)


jQuery v1.7.2行#5860:
注释矿山


不能在dom之外的内容之前插入内容。我很惊讶它甚至可以做任何事情,它只是默默地失败。@Esailija“从jQuery 1.4开始,.before()和.after()也可以在断开连接的DOM节点上工作。”@meze以某种黑客的方式,它们确实可以工作是的,尽管如此,这些元素之间仍然完全断开连接,只会给人一种工作的假象,因为它们恰好被同一个jQuery对象包装。在之前或之后都没有插入任何内容。@meze:就我而言,他没有说任何错误。不过,我想我已经明白了——对于分离的节点,只更改了集合,
.filter
查看新堆栈,这样就可以工作了
.sides
不查看堆栈,而是查看树。这会失败,因为没有父节点,所以不可能有“兄弟节点”的概念。@meze:隐式地是:
。end
只会弹出堆栈。由于
.before
仅更改分离节点的堆栈,因此在这种情况下,
.end
会从堆栈中弹出一个与连接节点不同的项目。不能在dom中不存在的项目之前插入内容。我很惊讶它甚至可以做任何事情,它只是默默地失败。@Esailija“从jQuery 1.4开始,.before()和.after()也可以在断开连接的DOM节点上工作。”@meze以某种黑客的方式,它们确实可以工作是的,尽管如此,这些元素之间仍然完全断开连接,只会给人一种工作的假象,因为它们恰好被同一个jQuery对象包装。在之前或之后都没有插入任何内容。@meze:就我而言,他没有说任何错误。不过,我想我已经明白了——对于分离的节点,只更改了集合,
.filter
查看新堆栈,这样就可以工作了
.sides
不查看堆栈,而是查看树。这会失败,因为没有父节点,所以不可能有“兄弟节点”的概念。@meze:隐式地是:
。end
只会弹出堆栈。由于
.before
仅更改分离节点的堆栈,因此在这种情况下,
.end
会从堆栈中弹出与连接节点不同的项目。谢谢,这解释了“如何”。因此,实际上问题更大,因为任何依赖于堆栈的函数在这两种情况下的行为都不同,例如。这种行为可靠吗?这似乎有点奇怪。@pimvdb,“这似乎有点奇怪”只要记住jQuery是由人编写的,他们有时会出错。很难说这种行为是故意的,还是仅仅是一种极端的情况。@zzbov:我理解:)只是在调试时遇到了困难。无论如何,我没有考虑的是jQuery集和实际同级之间的差异,这导致了混淆。谢谢你的帮助:)。他们会喜欢听关于真正的bug的,你也会喜欢直接从他们那里听到,如果这毕竟是设计的。谢谢,这解释了“如何”。因此,实际上问题更大,因为任何依赖于堆栈的函数在这两种情况下的行为都不同,例如。这种行为可靠吗?这似乎有点奇怪。@pimvdb,“这似乎有点奇怪”只要记住jQuery是由人编写的,他们有时会出错。很难说这种行为是故意的,还是仅仅是一种极端的情况。@zzbov:我理解:)只是在调试时遇到了困难。无论如何,我没有考虑的是jQuery集和实际同级之间的差异,这导致了混淆。谢谢你的帮助:)。他们会喜欢听关于真正的bug的,你也会喜欢直接从他们那里听到,如果这毕竟是出于设计的话。
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
    }
}