Что использовать вместо cloneNode () в Internet Explorer? - PullRequest
0 голосов
/ 04 июня 2018

Следующая функция 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 vsimportNode предполагает, что «браузеры не применяют» разницу между cloneNode и importNode. Я бы понял необходимость последнего, поскольку исходный и целевой узлы принадлежат разным документам (что не заботит Firefox),Но почему Internet Explorer не поддерживает importNode, учитывая, что он не позволяет cloneNode в этом случае?Копирование innerHTML кажется неудобным способом клонирования узла.Есть ли лучшая альтернатива importNode для Internet Explorer?(В идеале это было бы независимо от браузера.)

...