我有一个包含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。
任何人都知道修复此问题吗?
答案 0 :(得分:4)
您的问题是您没有将节点采用到当前文档中创建的片段中。使用以下任一项:
fragment.appendChild(fragment.ownerDocument.createElement("div"));
或
fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));
答案 1 :(得分:2)
我在这里只是猜测,但您可以尝试使用
创建divvar div = frames[0].document.createElement("div")
而不是
var div = document.createElement("div")
使用主文档的createElement()方法可能是IE出现问题的原因。
答案 2 :(得分:0)
我想我在这里找到了答案:http://www.alistapart.com/articles/crossbrowserscripting/
从两个不同的ownerDocument属性导入文档...需要使用DOM Level 2方法importNode(),因为在这些情况下DOM不允许使用简单的document.appendChild()。