Следующая функция 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?(В идеале это было бы независимо от браузера.)