这就是情况。 我在iframe中有一个复杂的UI,用户可以在提交之前执行多个操作。在此过程中,用户可以切换到另一个页面(在iframe中)并返回。这意味着iframe内有2个回发。
显然,我不希望用户丢失所有内容,但由于所有操作都是在客户端完成的,因此我无法从服务器重新加载以前的状态。
所以现在,我正在尝试将第一页内容移动到iframe父级,并在我们回来时将其重新放回原位。我已经走了一半,因为元素显示在页面中,但是它们丢失了数据属性和事件处理程序。
我正在使用它来移动父母的内容:
$("#resp").clone(true).attr("id", "refillResp").appendTo(window.top.$("#global"));
然后把它放回去:
window.top.$("#global").find("#refillResp").clone(true).attr("id", "resp").appendTo($("#tdResp"));
有没有人知道这样做的方法? PS:我已经测试了内容在简单移动父级时的反应,数据和事件已经消失。
答案 0 :(得分:0)
这是一个评论,但它不适合那里。
围绕不同文档移动DOM元素总是有点冒险。因为它可能导致意外行为(内存泄漏,行为奇怪的元素)。在目前的浏览器中,它大部分时间都有效,但我不推荐它。
如果你使用jQuery,你还有另外一个问题。 jQuery有一个缓存,用于存储分配给Object的data
和event
信息,此缓存与文档窗口一起存储。有关详细信息,请阅读此答案,另一个问题:
How to set jQuery data() on an iFrame body tag and retrieve it from inside the iFrame?
因此,如果您在不同文档之间移动带有jQuery的元素,那么您一方面会松开这些信息,另一方面它可能会导致内存泄漏。
随着事件发生,它更加复杂。例如如果你有委托事件,它可能会变得非常混乱。
如果您需要在iframe和parent之间交换数据,您应该考虑其他一些逻辑。
我在对我的另一个答案的评论中也提到了这一点,我在这里提到了这篇文章: How to set jQuery data() on an iFrame body tag and retrieve it from inside the iFrame?