Document.body.innerHTML = "" очищает веб-страницу? - PullRequest
26 голосов
/ 12 февраля 2010

Когда я обновлял страницу ниже в FF 3.0, я ожидал, что веб-страница очистится, но этого не произошло.

Почему document.body.innerHTML = "" не очищает страницу?

UPDATE: Я пытаюсь очистить предыдущий экран во время обновления, пока загружается новая страница. Я на самом деле хочу, чтобы страница очистилась, подожди, а затем начался следующий js. Я не хочу очищать экран после загрузки страницы.

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

Ответы [ 6 ]

43 голосов
/ 12 февраля 2010

document.body.innerHTML = ''; очищает body, да. Но он очищает innerHTML как есть в тот момент, когда выполняется код. Когда вы запускаете код до того, как изображения и скрипт на самом деле попадают в body, он пытается очистить body, но нечего очищать.

Если вы хотите очистить body, вы должны запустить код после заполнения body содержимым. Это можно сделать, поместив блок <script> в качестве последнего дочернего элемента body, чтобы все загружалось до запуска кода, или для прослушивания события dom:loaded необходимо использовать какой-либо способ.

14 голосов
/ 12 февраля 2010

Чтобы изложить ответ Даувема, добавьте свой код в тег загрузки сценария:

<script type="text/javascript">
    window.onload=function(){
       document.body.innerHTML = "";
    }
</script>
3 голосов
/ 05 января 2012

Соглашаясь с ответами Доу Маана и Эрика, здесь есть несколько других вещей, которые могут оказаться полезными для вас.

Во-первых, внутри тегов head вы можете ссылаться на отдельный файл JavaScript, который затем можно использовать повторно:

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

где common.js - это файл функции для повторного использования в каталоге верхнего уровня с именем common.

Во-вторых, вы можете отложить работу скрипта с помощью setTimeout, например ::

setTimeout(someFunction, 5000);

Второй аргумент в миллисекундах. Я упоминаю об этом, потому что вы, похоже, пытаетесь что-то отложить в своем исходном фрагменте кода.

0 голосов
/ 20 марта 2019

Как говорили другие, простое решение - поместить ваш скрипт внизу страницы, потому что все элементы DOM загружаются синхронно сверху вниз. В противном случае, я думаю, что вы ищете document.onload(() => {callback_body}) или window.onload(() => {callback_body}), как сказал Эрик. Это позволяет вам выполнить сценарий при наступлении события dom:loaded, как сказал Доу Маан. Не уверен насчет свойств window.onload, но document.onload запускается только после загрузки всех элементов, css и скриптов. В вашем случае:

<script type="text/javascript">
    document.onload(() =>
        document.body.innerHTML = "";
    )
</script>
0 голосов
/ 30 декабря 2016

Я очищаю экран, используя функцию

var clear_body = function (){
    var lista = document.body.childNodes;
    for (var i = lista.length - 1; i >= 0 ;i--){
        document.body.removeChild(lista[i])
    }
}
0 голосов
/ 12 февраля 2010

Я не уверен, чего вы пытаетесь достичь, но вы можете рассмотреть вопрос об использовании jQuery, который позволяет вам поместить свой код в тег head или отдельный файл сценария и при этом выполнять код после DOM загружен.

Затем вы можете сделать что-то вроде:

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

, а также выборочное удаление элементов (все DIV, только DIV с определенными классами и т. Д.)

...