`insertBefore()`或`insertAfter()`在原点和目标相同时删除元素

时间:2013-01-13 17:35:00

标签: javascript jquery

看起来当insertBefore()insertAfter()与原点和目的地具有相同的元素时,该元素将被删除。我的理解是否正确?

$('#foo').insertBefore($('#foo'))

这是一个功能吗?如果是这样,那些功能还有其他的问题吗?

3 个答案:

答案 0 :(得分:7)

这是因为insertBeforeinsertAfter删除了一个元素并将其移动。删除元素后,在元素之前(或之后)不再存在原始元素。要获得您可能正在寻找的克隆效果,请尝试:

$('#foo').clone().insertBefore($('#foo'))

答案 1 :(得分:2)

它实际上似乎是known bug(不是一个功能),虽然可能有一个传入的修复程序(1.9版本)。

来自bug评论:

  

由于jQuery.domManip传入一个片段,jQuery.clean将#x移动到   片段。后来当它进入jQuery.after中的回调时,   原始的parentNode消失了。

答案 2 :(得分:0)

是的,insertBefore()insertafter() 将元素从源位置移动到目标位置。如果要替换插入克隆,可以使用:

$('#foo').clone().insertBefore($('#foo'))

但请注意,克隆将具有相同的ID,这是您不想要的。因此,在克隆之后,但在插入之前更改id。

即。类似的东西:

$('#foo').clone().attr('id', 'foo2').insertBefore($('#foo'))