Can't appendChild to a node created from anoth

2019-01-25 20:43发布

I have a page with an iframe and would like to extract a DOM node from the child frame and put it on the parent page. This works in Firefox (3.5), but not in Internet Explorer (7).

I've broken down the code to the simplest I can.

<!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>

I get an error "Invalid argument" on the "fragment.appendChild(div);" line. The error seems to stem from the fact that I'm creating the document fragment from the iframe's document and the div element from the parent document. This code works if both use the same document.

I want to keep any events that might be attached to the DOM nodes, so I don't want to use innerHTML.

Anyone know a fix for this?

3条回答
可以哭但决不认输i
2楼-- · 2019-01-25 21:36

Your problem is that you are not adopting the nodes into the fragment that are created in the current document. Use either the following:

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

or

fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));
查看更多
冷血范
3楼-- · 2019-01-25 21:41

I think I found the answer here: http://www.alistapart.com/articles/crossbrowserscripting/

Importing documents from two different ownerDocument properties ... requires the use of the DOM Level 2 method importNode(), since in these cases the DOM will not allow a simple document.appendChild().

查看更多
淡お忘
4楼-- · 2019-01-25 21:45

I'm just hazarding a guess here, but you could try creating the div using

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

instead of

var div = document.createElement("div") 

Using the main document's createElement() method may be why IE is having a problem.

查看更多
登录 后发表回答