好的,所以我有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?
答案 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”应用到我想要的顶部,将其强制到顶部。