insatisfecho de la alternativa que indique me puse a investigar sobre este error en iexplorer. tengo mis dudas de cuál navegador realmente está haciendo las cosas bien. en la documentación de appendChild en MDN hay una
nota acerca de los elementos a agregar. en un párrafo cita:
Cita: This method is not allowed to move nodes between different documents. If you want to append node from a different document (for example to display results from AJAX request) you must first use importNode.
a éste método no se le permite mover nodos entre diferentes documentos. si deseas anexar un nodo de un documento distinto (por ejemplo para mostrar el resultado de una petición Ajax) primero debes utilizar importNode.
intenté corroborar ese dato buscando en la especificación oficial pero no encontre nada al respecto. solo pude ver un pequeño detalle en la descripción de appendChild que dice en DOM Level 3 hubieron cambios, pero no pude determinar cuales. quizás esa restrincción existía antes y por eso en iexplorer — al menos hasta la versión 9 — se genera el error. edit: dato corroborado. en la especificación aparece como DOM Exception WRONG_DOCUMENT_ERR
en otra fuente, la explicación a este problema es que la propiedad ownerDocument del nodo de origen es distinto a la del nodo destino. sin embargo, curiosamente en pruebas que llevaba a cabo pude lograr transferir nodos de un documento a otro pero dentro del mismo ambiente (ventana).
Código:
// asumiendo que el documento tiene contenido ;
// en iexplorer9 me funciona ;
var doc = document.implementation.createHTMLDocument();
doc.documentElement.replaceChild(document.body, doc.body);
en conclusión, tal como dice la cita, lo correcto es utilizar importNode. no obstante, nótese que importNode es una forma de
clonar un nodo y el original no será removido.
Código:
nodo.appendChild(document.importNode(nodo_documento_externo));