【发布时间】:2015-01-13 07:05:10
【问题描述】:
我有一个 html 页面,其中包含一些预渲染的内容和一些尚未渲染的内容。我想立即显示预渲染的内容,然后开始渲染其余的内容。 我没有使用 jQuery。
参见下面的 sn-p。我尝试了各种方法,包括在结束正文标记之前注入我的脚本,并提供我的脚本来填充 DOM 作为对window.onload、document.body.onload 和document.addEventListener('DOMContentLoaded') 的回调。在任何情况下,页面都不会显示预渲染的内容,直到其余内容被渲染。
<html><head></head>
<body>
<header>What it is, my doge?</header>
<div id="main"></div>
<script>
var main = document.getElementById('main');
for (var i = 0; i < 500; i++)
main.innerText += new Date();
</script>
</body>
</html>
<html><head></head>
<body>
<header>What it is, my doge?</header>
<div id="main"></div>
<script>
var main = document.getElementById('main');
document.body.onload = function() {
for (var i = 0; i < 500; i++)
main.innerText += new Date();
};
</script>
</body>
</html>
<html><head></head>
<body>
<header>What it is, my doge?</header>
<div id="main"></div>
<script>
var main = document.getElementById('main');
window.onload = function() {
for (var i = 0; i < 500; i++)
main.innerText += new Date();
};
</script>
</body>
</html>
<html><head></head>
<body>
<header>What it is, my doge?</header>
<div id="main"></div>
<script>
var main = document.getElementById('main');
document.addEventListener('DOMContentLoaded', function() {
for (var i = 0; i < 500; i++)
main.innerText += new Date();
});
</script>
</body>
</html>
一个有效的案例是window.setTimeout,超时时间为0。但是,这只是将功能推迟到无事可做。这是最佳做法吗?
<html><head></head>
<body>
<header>What it is, my doge?</header>
<div id="main"></div>
<script>
var main = document.getElementById('main');
window.setTimeout(function() {
for (var i = 0; i < 500; i++)
main.innerText += new Date();
}, 0);
</script>
</body>
</html>
【问题讨论】:
-
1) 我们需要这里的代码。 2)您的描述与小提琴不符。 3) window.onload 将在所有内容加载完毕后触发。你需要做的就是把你的电话放在
</body>标签之前 -
小提琴正是你所描述的一个例子,它显然不起作用。
-
@MatthewJamesDavis 您的未渲染内容是如何渲染的?
-
任意。可能通过剔除或通过 DOM API 附加文档片段。
-
注意:
setTimeout(function(){}, 0)方法在 FireFox 中似乎不起作用。它需要约 50-100 毫秒的超时时间。
标签: javascript html dom