在Internet Explorer中使用什么而不是cloneNode()?

时间:2018-06-04 15:19:40

标签: javascript internet-explorer-11 clonenode

以下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 vs importNode表明“浏览器不强制执行”cloneNodeimportNode之间的区别我理解后者的需要,因为源节点和目标节点属于不同的文件(Firefox不关心)。但是,为什么Internet Explorer不支持importNode,因为在这种情况下它不允许cloneNode?复制innerHTML似乎是克隆节点的一种尴尬方式。对于Internet Explorer,是否有更好的importNode替代方案? (理想情况下,它与浏览器无关。)

0 个答案:

没有答案