4

我有一个带有 iframe 的页面,想从子框架中提取一个 DOM 节点并将其放在父页面上。这适用于 Firefox (3.5),但不适用于 Internet Explorer (7)。

我已将代码分解为最简单的代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
<title>Fragment</title>
</head>

<body>

<iframe src="blank.html"></iframe>

<script type="text/javascript">
window.onload = function () {
    var fragment = document.createDocumentFragment();
    var div = frames[0].document.createElement("div");
    fragment.appendChild(div);
};
</script>

</body>
</html>

Invalid argument我在“ fragment.appendChild(div);”行收到错误“ ”。该错误似乎源于我从 iframe 的文档和父文档的 div 元素创建文档片段的事实。如果两者都使用相同的文档,则此代码有效。

我想保留任何可能附加到 DOM 节点的事件,所以我不想使用 innerHTML。

有人知道解决这个问题吗?

4

3 回答 3

4

您的问题是您没有将节点采用到当前文档中创建的片段中。使用以下任一:

fragment.appendChild(fragment.ownerDocument.createElement("div"));

或者

fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));
于 2010-02-17T22:36:35.023 回答
2

我只是在这里冒险猜测,但您可以尝试使用创建 div

var div = frames[0].document.createElement("div") 

代替

var div = document.createElement("div") 

使用主文档的 createElement() 方法可能是 IE 出现问题的原因。

于 2010-02-17T21:10:32.283 回答
0

我想我在这里找到了答案:http ://www.alistapart.com/articles/crossbrowserscripting/

从两个不同的 ownerDocument 属性导入文档...需要使用 DOM 级别 2 方法 importNode(),因为在这些情况下,DOM 不允许使用简单的 document.appendChild()。

于 2010-02-18T19:26:01.933 回答