5

看起来当insertBefore()insertAfter()具有与起点和终点相同的元素时,该元素被删除。我的理解正确吗?

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

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

4

3 回答 3

9

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

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

于 2013-01-13T17:38:07.607 回答
3

它实际上似乎是一个已知的错误(不是功能),尽管可能会有一个即将到来的修复(1.9 版本)。

来自错误评论:

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

于 2013-01-13T17:42:21.200 回答
0

是的,insertBefore()并将元素从源位置insertafter() 移动到目标位置。如果你想插入一个克隆,你可以使用:

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

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

即类似的东西:

$('#foo').clone().attr('id', 'foo2').insertBefore($('#foo'))
于 2013-01-13T17:36:35.687 回答