使用jQuery以非破坏性方式移动div?

时间:2013-07-17 22:53:43

标签: jquery

好的,所以我有3个div ...

<div id="video"></div>
<div id="info"></div>
<div id="chat"></div>

我正在使用jQuery在按下按钮时移动div。

$('#chat').insertBefore('#video');

我遇到了一个问题。我相信这个函数的作用是复制/克隆chat div,在video div之前插入它,然后销毁原始的chat div。但是,这不能很好地工作,因为很明显,chat div包含一个聊天室。

因此,克隆和销毁的方式加载了一个新的聊天元素,这不仅占用了大量资源,而且还迫使用户重新登录聊天室,因为它是一个不同的实例。

有没有办法以非破坏性的方式移动div?没有克隆和破坏?某种方式来物理移动div?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用原生insertBefore

var video = document.getElementById('video'),
    chat  = document.getElementById('chat');

video.parentNode.insertBefore(chat, video);

在一个完美的世界中,jQuery方法应该以这种方式工作。但是如果你有f.ex有多个目标并且jQuery“很好”,那么这样做可能会为你的情况提供一些启示......

答案 1 :(得分:1)

我担心如果不重新加载内容,就无法将IFRAME从DOM中的一个位置移动到另一个位置。

insertBefore存在动态内容问题,特别是如果您要处理 IFRAMES

<强> LIVE DEMO with chat

如果您点击将insertBefore() iframe元素的SWAP,您会发现iframe内容已刷新
聊天应用(模块)也是如此

答案 2 :(得分:0)

来自insertBefore的jQuery网站的

Document声明如下。

  

如果以这种方式选择的元素插入到单个位置   在DOM的其他地方,它将在目标之前移动(未克隆)   并返回一个由插入元素组成的新集合。

以上陈述适用于您的情况。 因此,您的div不会被销毁或克隆。

  

如果有多个目标元素,则克隆副本   将在每个目标之后创建插入元素的插入   首先,新的集合(原始元素加克隆)是   返回

如果元素在许多目标之前插入,它将被克隆。

答案 3 :(得分:0)

我以不同的方式解决了这个问题。由于人们确认无法将iFRAME从DOM中的一个位置移动到另一个位置而无需重新加载它的内容......

不是在DOM中移动div,而是将其保留在原来的位置,并将“position:absolute”应用到我想要的顶部,将其强制到顶部。