2010-02-12 12 views
21

Wenn ich die Seite unten in FF 3.0 aktualisiere, erwartete ich, dass die Webseite gelöscht wird, aber das tat es nicht.Wird document.body.innerHTML = "" die Webseite gelöscht?

Warum löscht document.body.innerHTML = "" die Seite nicht?

UPDATE: Ich versuche, den vorherigen Bildschirm während einer Aktualisierung zu löschen, während die neue Seite geladen wird. Ich möchte die Seite wirklich sehen, warten und dann die nächste js laufen. Ich möchte den Bildschirm nicht löschen, nachdem die Seite geladen wurde.

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

Antwort

36

document.body.innerHTML = ''; macht die body klar, ja. Aber es löscht die innerHTML, wie es in dem Moment ist, in dem der Code ausgeführt wird. Wie Sie den Code ausführen, bevor die Bilder und das Skript tatsächlich in der body sind, versucht es, die body zu löschen, aber es gibt nichts zu klären. Wenn Sie die body löschen möchten, müssen Sie den Code ausführen, nachdem die body mit Inhalt gefüllt wurde. Sie können dies tun, indem Sie entweder den <script>-Block als letztes Kind von body platzieren, also wird alles geladen, bevor der Code ausgeführt wird, oder Sie müssen einen Weg verwenden, um das dom:loaded-Ereignis anzuhören.

+0

Also warum kann ich nicht diese visuell sehen? Ich lösche den Bildschirm und warte (der Verzögerungscode), aber der Bildschirm hat immer noch den Inhalt der vorherigen Ladung. –

+1

Da Ihr Skript ausgeführt wird, bevor dem Körper etwas hinzugefügt wird, löschen Sie nichts.Verschieben Sie in dem obigen Beispiel Ihren

13

auf Douwem Antwort auslegen, in Ihrem Skript-Tag, in einem onload setzen Sie Ihren Code:

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

Ich bin nicht sicher, was Sie erreichen wollen, aber Sie können jQuery betrachten möchten, mit Sie können Ihren Code in das head-Tag oder in eine separate Skriptdatei einfügen und den Code nach dem Laden des DOM weiterhin ausführen lassen.

Sie können dann so etwas wie:

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

sowie selektives Entfernen von Elementen (alle DIVs, nur DIVs mit bestimmten Klassen, etc.)

+0

Ich versuche, den vorherigen Bildschirm während einer Aktualisierung zu löschen, während die neue Seite geladen wird. –

3

Während Antworten mit Douwe Maan und Erik Vereinbarung, Es gibt ein paar andere Dinge, die Sie hier nützlich finden können.

Zum einen in Ihrem Kopf-Tags, können Sie eine separate JavaScript-Datei verweisen, die dann wieder verwendbar ist:

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

wo common.js ist Ihre wieder verwendbare Funktion Datei in einem Verzeichnis auf oberster Ebene namens üblich.

Zweitens können Sie den Betrieb eines Skripts verzögern setTimeout verwenden, z.B .:

setTimeout(someFunction, 5000); 

Das zweite Argument in Millisekunden. Ich erwähne das, weil Sie scheinbar versuchen, etwas in Ihrem ursprünglichen Code-Snippet zu verschieben.

+0

Lieber 'setTimeout (someFunction, 5000);' vermeiden, um eval und String-to-number zu erzwingen. – mwcz

+1

Angemessener Kommentar. Antwort geändert. –

-1

ich meinen Bildschirm mit klar ist, dass Funktion

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