Esta es el arreglo más válida que encomtrarás dar, pero estúdiala pausadamente y analiza si se puede adaptar a tu trabajo.
Solución:
La razón por la que se reemplaza su HTML es debido a una función malvada de JavaScript: document.write()
.
Definitivamente es “mala forma”. Solo funciona con páginas web si lo usa en la carga de la página; y si lo usa durante el tiempo de ejecución, reemplazará todo su documento con la entrada. Y si lo está aplicando como una estructura XHTML estricta, ni siquiera es un código válido.
el problema:
document.write
escribe en el flujo de documentos. Vocacióndocument.write
en un documento cerrado (o cargado) llama automáticamentedocument.open
que borrará el documento.
— cita de la MDN
document.write()
tiene dos secuaces, document.open()
y document.close()
. Cuando el documento HTML se está cargando, el documento está “abierto”. Cuando el documento ha terminado de cargarse, el documento se ha “cerrado”. Utilizando document.write()
en este punto, borrará todo el documento HTML (cerrado) y lo reemplazará con un nuevo documento (abierto). Esto significa que su página web se borró sola y comenzó a escribir una nueva página, desde cero.
Yo creo document.write()
hace que el navegador también tenga una disminución del rendimiento (corríjame si me equivoco).
un ejemplo:
Este ejemplo escribe la salida en el documento HTML después la página ha cargado. Reloj document.write()
Los poderes malignos de borran todo el documento cuando presionas el botón “exterminar”:
I am an ordinary HTML page. I am innocent, and purely for informational purposes. Please do not
me!
las alternativas:
.innerHTML
Esta es una maravillosa alternativa, pero esta attribute tiene que estar adjunto al elemento donde se quiere poner el texto.
Ejemplo: document.getElementById('output1').innerHTML = 'Some text!';
.createTextNode()
es la alternativa recomendada por el W3C.
Ejemplo: var para = document.createElement('p');
para.appendChild(document.createTextNode('Hello, '));
NOTA: Se sabe que esto tiene algunas disminuciones de rendimiento (más lento que .innerHTML
). recomiendo usar .innerHTML
en cambio.
el ejemplo con el .innerHTML
alternativa:
I am an ordinary HTML page.
I am innocent, and purely for informational purposes.
Please do not
me!
Aquí hay un código que debería reemplazar a document.write en el lugar:
document.write=function(s)
var scripts = document.getElementsByTagName('script');
var lastScript = scripts[scripts.length-1];
lastScript.insertAdjacentHTML("beforebegin", s);
Como alternativa recomendada a document.write
podría usar la manipulación de DOM para consultar directamente y agregar elementos de nodo al DOM.
Comentarios y calificaciones de la guía
Puedes proteger nuestro análisis dejando un comentario y valorándolo te estamos agradecidos.