2010-02-12 22 views
21

Quando aggiorno la pagina di seguito in FF 3.0, mi aspettavo che la pagina Web venisse cancellata, ma non è così.document.body.innerHTML = "" cancella la pagina web?

Perché document.body.innerHTML = "" non cancella la pagina?

UPDATE: Sto tentando di cancellare la schermata precedente durante un aggiornamento mentre la nuova pagina si sta caricando. In realtà voglio vedere la pagina chiara, attendere e poi il prossimo js in esecuzione. Non voglio cancellare lo schermo dopo che la pagina è stata caricata.

... 
<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> 

risposta

36

document.body.innerHTML = ''; fa cancellare il body, sì. Ma cancella il innerHTML così com'è nel momento in cui viene eseguito il codice. Mentre esegui il codice prima che le immagini e lo script siano effettivamente nello body, prova a cancellare lo body, ma non c'è nulla da chiarire.

Se si desidera cancellare il body, è necessario eseguire il codice dopo che il body è stato riempito con il contenuto. È possibile farlo posizionando il blocco <script> come ultimo figlio di body, quindi tutto viene caricato prima dell'esecuzione del codice oppure è necessario utilizzare in qualche modo l'ascolto dell'evento dom:loaded.

+0

Allora, perché non può vedere questo ho visivamente? Svuoto lo schermo e attendo (il codice di ritardo) ma lo schermo ha ancora il contenuto del carico precedente. –

+1

Perché il tuo script viene eseguito prima che qualcosa venga aggiunto al corpo, quindi non stai cancellando nulla.Nell'esempio sopra riportato, sposta il blocco

13

Per esporre su risposta di Douwem, nel tag script, mettere il codice in un onload:

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

Non sono sicuro di quello che stai cercando di raggiungere, ma si consiglia di considerare l'utilizzo di jQuery , che consente di inserire il codice nel tag head o in un file di script separato e mantenere il codice eseguito dopo che il DOM è stato caricato.

si può quindi fare qualcosa di simile:

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

elementi rimuovendo così come selettivamente (tutti i DIV, solo DIV con alcune classi, etc.)

+0

Sto tentando di cancellare la schermata precedente durante un aggiornamento mentre la nuova pagina si sta caricando. –

3

Pur concordando con Douwe Maan e le risposte di Erik, ci sono un paio di altre cose che potresti trovare utili.

In primo luogo, entro i tag head, è possibile fare riferimento a un file separato JavaScript, che è quindi riutilizzabile:

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

dove common.js è il file funzione riutilizzabili in una directory di livello superiore chiamato comune.

secondo luogo, è possibile ritardare il funzionamento di uno script utilizzando setTimeout, es .:

setTimeout(someFunction, 5000); 

Il secondo argomento è in millisecondi. Dico questo, perché sembra che tu stia cercando di ritardare qualcosa nel tuo snippet di codice originale.

+0

Preferisci 'setTimeout (someFunction, 5000);' per evitare la conversione e la coercizione da stringa a numero. – mwcz

+1

Commento equo. Risposta modificata –

-1

a cancellare il mio schermo utilizzando è funzione che

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