以下 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) 中使用。其他人抛出以下异常:
- (B) HierarchyRequestError
- (C) 不支持接口
尽管问题JavaScript:cloneNode 与 importNode表明“浏览器不强制执行”两者之间的区别cloneNode
,importNode
但我会理解后者的需要,因为源节点和目标节点属于不同的文档(Firefox 不关心)。但是,既然 Internet Explorer在这种情况下importNode
不允许,为什么不支持呢?cloneNode
复制innerHTML
似乎是克隆节点的一种尴尬方式。importNode
Internet Explorer是否有更好的替代方案?(理想情况下,它将独立于浏览器。)