0

情况就是这样。我在 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:我已经测试了当简单地移动到父级并且数据和事件已经消失时内容的反应。

4

1 回答 1

0

它更像是一个评论,但它不适合在那里。

在不同的文档中移动 DOM 元素总是有点冒险的。因为它可能导致意外行为(内存泄漏、行为异常的元素)。在当前的浏览器中,它大部分时间都可以工作,但我不推荐它。

如果你使用 jQuery,你还有另一个问题。jQuery 有一个缓存,用于存储关于dataevent分配给对象的信息,该缓存与文档窗口一起存储。有关更多详细信息,请阅读此答案以回答另一个问题:

如何在 iFrame 正文标签上设置 jQuery data() 并从 iFrame 内部检索它?

因此,如果您使用 jQuery 在不同文档之间移动元素,您目前一方面会丢失这些信息,另一方面可能会导致内存泄漏。

有了事件,情况就更加复杂了。例如,如果您委托了事件,它可能会变得完全混乱。

如果您需要在 iframe 和父级之间交换数据,您应该考虑一些其他逻辑。

我还在对我的另一个答案的评论中提到了这一点,我在其中提到了这篇文章: 如何在 iFrame 正文标签上设置 jQuery data() 并从 iFrame 内部检索它?

于 2013-06-06T09:30:21.513 回答