2010-02-12 26 views
21

Cuando actualizo la página a continuación en FF 3.0, esperaba que la página web se borrara, pero no fue así.¿document.body.innerHTML = "" borra la página web?

¿Por qué no document.body.innerHTML = "" borrar la página?

ACTUALIZACIÓN: Estoy tratando de borrar la pantalla anterior durante una actualización mientras se carga la página nueva. De hecho, quiero ver la página despejada, esperar y luego la siguiente js ejecutándose. No quiero borrar la pantalla después de que la página se haya cargado.

... 
<body> 
    <script type="text/javascript"> 
     document.body.innerHTML = ""; 
     for (var i = 0; i < 1000000000; i++) { 
     } 
    </script> 

    <img src="images/web.gif" /><br /> 

    <script type="text/javascript"> 
     document.write("hello<br />"); 
    </script> 

    <img src="images/warning.png" /><br /> 

</body> 

Respuesta

36

document.body.innerHTML = ''; se despeja el body, sí. Pero borra el innerHTML tal como está en el momento en que se ejecuta el código. A medida que ejecuta el código antes de que las imágenes y el script estén realmente en el body, intenta borrar el body, pero no hay nada que borrar.

Si desea borrar el body, debe ejecutar el código después de que el body haya sido llenado con contenido. Puede hacer esto colocando el bloque <script> como el último elemento secundario de body, de modo que todo se cargue antes de que se ejecute el código, o debe usar alguna forma de escuchar el evento dom:loaded.

+0

Así que por qué no puedo ver esto visualmente? Borro la pantalla y espero (el código de demora) pero la pantalla todavía tiene el contenido de la carga anterior. –

+1

Porque su script se ejecuta antes de que se agregue algo al cuerpo, por lo que no está despejando nada.En el ejemplo anterior, mueva su bloque

13

Para exponer sobre la respuesta de Douwem, en su etiqueta script, poner su código en un proceso de carga:

<script type="text/javascript"> 
    window.onload=function(){ 
     document.body.innerHTML = ""; 
    } 
</script> 
1

No estoy seguro de lo que estamos tratando de lograr, pero es posible que desee considerar el uso de jQuery , que le permite poner su código en la etiqueta principal o en un archivo de script separado y aún tener el código ejecutado después de que el DOM se haya cargado.

entonces usted puede hacer algo como:

$(document).ready(function() { 
$(document).remove(); 
}); 

elementos de la eliminación, así como de forma selectiva (todos los DIVs, sólo DIVs con ciertas clases, etc.)

+0

Estoy intentando borrar la pantalla anterior durante una actualización mientras se carga la página nueva. –

3

Aun estando de acuerdo con Douwe Maan y respuestas de Erik, hay un par de otras cosas aquí que pueden serle útiles.

En primer lugar, dentro de sus etiquetas de la cabeza, se puede hacer referencia a un archivo separado JavaScript, que luego es reutilizable:

<script language="JavaScript" src="/common/common.js"></script> 

donde common.js es su archivo de función reutilizables en un directorio de nivel superior llamada común.

En segundo lugar, se puede retrasar el funcionamiento de una secuencia de comandos con setTimeout, por ejemplo .:

setTimeout(someFunction, 5000); 

El segundo argumento es en milisegundos. Menciono esto porque parece que estás intentando retrasar algo en tu fragmento de código original.

+0

Prefiere 'setTimeout (someFunction, 5000);' para evitar la coacción eval y string-to-number. – mwcz

+1

Comentario de la feria. Respuesta enmendada –

-1

Me aclaro la pantalla utilizando la función es que

var clear_body = function(){ 
    var lista = document.body.childNodes; 
    for (var i = lista.length - 1; i >= 0 ;i--){ 
     document.body.removeChild(lista[i]) 
    } 
} 
Cuestiones relacionadas