32

当我在 FF 3.0 中刷新下面的页面时,我希望网页会清除,但事实并非如此。

为什么不document.body.innerHTML = ""清除页面?

更新: 我试图在新页面加载时在刷新期间清除前一个屏幕。我其实是想看清楚页面,等下一个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>
4

7 回答 7

50

document.body.innerHTML = '';确实清除了body,是的。但它innerHTML会在代码运行时清除它。当您在图像和脚本实际位于 中之前运行代码时body,它会尝试清除body,但没有什么要清除的。

如果要清除,则必须在已填充内容body后运行代码。body您可以通过将<script>块放置为 的最后一个子块来做到这一点body,因此在运行代码之前加载所有内容,或者您​​必须使用某种方式来监听dom:loaded事件。

于 2010-02-12T09:04:44.373 回答
15

为了阐述 Douwem 的答案,在您的脚本标签中,将您的代码放入 onload:

<script type="text/javascript">
    window.onload=function(){
       document.body.innerHTML = "";
    }
</script>
于 2010-02-12T09:19:38.337 回答
3

虽然同意 Douwe Maan 和 Erik 的回答,但您可能会发现这里还有其他一些有用的东西。

首先,在您的 head 标签中,您可以引用一个单独的 JavaScript 文件,然后可以重用:

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

其中 common.js 是您在名为 common 的顶级目录中的可重用函数文件。

其次,您可以使用 setTimeout 延迟脚本的操作,例如:

setTimeout(someFunction, 5000);

第二个参数以毫秒为单位。我提到这一点,因为您似乎试图延迟原始代码片段中的某些内容。

于 2012-01-04T21:28:21.433 回答
1

正如其他人所说,一个简单的解决方案是将您的脚本放在页面底部,因为所有 DOM 元素都是从上到下同步加载的。否则,我认为您正在寻找的是document.onload(() => {callback_body})或者window.onload(() => {callback_body})正如 Erik 所说的那样。dom:loaded正如 Douwe Maan 所说,这些允许您在事件触发时执行脚本。不确定 的属性window.onload,但document.onload只有在加载所有元素、css 和脚本后才会触发。在你的情况下:

<script type="text/javascript">
    document.onload(() =>
        document.body.innerHTML = "";
    )
</script>

或者,如果您使用的是旧版浏览器:

<script type="text/javascript">
    document.onload(function() {
        document.body.innerHTML = "";
    })
</script>
于 2019-03-20T13:33:12.647 回答
0

我不确定您要实现什么,但您可能需要考虑使用 jQuery,它允许您将代码放在 head 标记或单独的脚本文件中,并且在 DOM 加载后仍然执行代码。

然后,您可以执行以下操作:

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

以及选择性地删除元素(所有 DIV,仅具有某些类的 DIV 等)

于 2010-02-12T09:25:20.613 回答
0

使用document.body.innerHTML = ''; 确实有效!只是说,如果使用HTML( DOMor on function) 你可以使用
document.writeln('');但只能使用onClickor onDoubleClick:)

于 2020-11-14T14:50:35.103 回答
-1

我使用以下功能清除屏幕

var clear_body = function (){
    var lista = document.body.childNodes;
    for (var i = lista.length - 1; i >= 0 ;i--){
        document.body.removeChild(lista[i])
    }
}
于 2016-12-30T13:26:26.223 回答