【问题标题】:Can I move HTML DOM object to a browser dialog to implement "detach" functionality我可以将 HTML DOM 对象移动到浏览器对话框以实现“分离”功能吗
【发布时间】:2011-01-19 21:06:28
【问题描述】:

如果我用window.open 打开浏览器对话框,我可以来回移动 HTML DOM 对象吗?

我知道如何使用 jQuery 的 .detach() 在页面内移动内容(包括所有绑定事件)。我想知道在页面和它的子对话框之间是否有办法做到这一点。

主要目的是支持将页面上的小部件“分离”或“撕下”功能到单独的对话框/窗口中。

【问题讨论】:

  • 对答案感兴趣;如果没有其他原因,除了 IE 对窗口间对象迁移的极度紧张之外,我个人不会打赌这种工作。我会用.html() 提取并在新页面中添加内容,然后重新建立处理程序等。

标签: jquery html dom dialog popup


【解决方案1】:

您不应该能够将 DOM 节点从一个 ownerDocument 移动到另一个。 DOM Level 1 Core 说你会得到一个DOMException 和代码WRONG_DOCUMENT_ERR。正确的做法是致电document.importNode 以获取内容的新副本。 (也有 document.adoptNode 不用复制,但它更新,到达 DOM Level 3 Core。

但是:

  1. 在非 XML HTML 文档的特定情况下,许多浏览器允许您在另一个 ownerDocument 中使用一个文档中的节点。

  2. IE 不支持importNode。 (显然是adoptNode。)当importNode 不可用时,您可以退回到直接插入节点,或者通过DOM-walking 或HTML 序列化/解析手动复制新文档中的内容。 (两者都会丢失信息;不要期望恢复任意属性或 EventListeners/IE-attached-events。)

  3. 在 IE6-7 中让一个文档中的事件路径进入另一个文档的代码时可能会出现一些问题。当文档关闭/导航离开时,您可能会遇到一些意想不到的行为。

无论如何,jQuery 并不是为此而构建的。它本身封装了对所有者文档的引用,因此当您从源自文档 A 的代码中调用 $ 时,您将为文档 A 使用 document 对象,即使您的节点和事件路径现在位于文件 B。这会引起很大的混乱。对于 jQuery,最好为每个文档保留一份库副本,并仅使用该副本与该文档进行交互。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多