以下JavaScript函数旨在打开一个新的HTML页面并将div的内容复制到它(实际的任务当然比复制更复杂):
function copydiv(srcid) {
var w = window.open('about:blank', '_blank');
var otherdoc = w.document;
otherdoc.write('<html><body>');
otherdoc.write('</body></html>');
otherdoc.close();
var srcdiv = document.getElementById(srcid);
var otherbody = otherdoc.getElementsByTagName('body')[0];
// (A) var dstdiv = otherdoc.createElement('div');
// (A) otherbody.appendChild(dstdiv);
// (A) dstdiv.innerHTML = srcdiv.innerHTML;
// (B) otherbody.appendChild(srcdiv.cloneNode(true));
// (C) otherbody.appendChild(otherdoc.importNode(srcdiv, true));
}
标有(A)/(B)/(C)的代码部分是替代品;这三个都在Firefox中运行。但是,只有(A)在Internet Explorer(11.49)中有效。其他人抛出以下例外:
虽然问题JavaScript: cloneNode vs importNode表明“浏览器不强制执行”cloneNode
和importNode
之间的区别我理解后者的需要,因为源节点和目标节点属于不同的文件(Firefox不关心)。但是,为什么Internet Explorer不支持importNode
,因为在这种情况下它不允许cloneNode
?复制innerHTML
似乎是克隆节点的一种尴尬方式。对于Internet Explorer,是否有更好的importNode
替代方案? (理想情况下,它与浏览器无关。)