Javascript Can';将子对象追加到从另一个帧创建的节点

Javascript Can';将子对象追加到从另一个帧创建的节点,javascript,dom,iframe,frames,Javascript,Dom,Iframe,Frames,我有一个带有iframe的页面,希望从子框架中提取一个DOM节点,并将其放在父页面上。这在Firefox(3.5)中有效,但在InternetExplorer(7)中无效 我已经把代码分解成最简单的了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> &l

我有一个带有iframe的页面,希望从子框架中提取一个DOM节点,并将其放在父页面上。这在Firefox(3.5)中有效,但在InternetExplorer(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>

碎片
window.onload=函数(){
var fragment=document.createDocumentFragment();
var div=frames[0]。document.createElement(“div”);
子片段(div);
};
我在“
fragment.appendChild(div);
”行上得到一个错误“
无效参数”。这个错误似乎源于这样一个事实:我正在从iframe的文档创建文档片段,并从父文档创建div元素。如果两者使用相同的文档,则此代码有效

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


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

我只是在这里冒昧猜测一下,但是您可以尝试使用

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

var div = document.createElement("div") 

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

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

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


我想我在这里找到了答案:

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


我认为你无法解决这个问题。仅供参考,我发现它在IE8中有效。是的,确实有效。但这并不能解决我真正想做的事情,将节点从子节点移动到父节点。您的第一个示例在实践中不起作用,因为我无法控制div元素的创建方式。尝试调用“adoptNode”时出现“Object不支持此属性或方法”错误。
fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));