此:
function myFunction()
{
document.write("sup");
}
在html中调用如:
<div id="myDiv">
<script>myFunction();</script>
</div>t
将字符串sup
添加到myDiv
div元素。这正是我想要的。但是,这个:
function loadFile(uri)
{
var r = new XMLHttpRequest();
document.write("trying to open: " + uri);
r.open('GET', uri, true);
r.send(null);
r.onreadystatechange = function()
{
if (r.readyState == 4)
{
myFunction();
}
}
}
function myFunction()
{
document.write("sup");
}
这样叫:
<div id="myDiv">
<script>loadFile("filename.txt");</script>
</div>
似乎覆盖了我的整个html文件。即当我在Firefox中运行时,它只显示字符串sup
(这是页面的全部内容),但页面似乎仍在加载(FF的加载图标仍然存在动画,显然是无限的)。 / p>
首先,这将仅在本地,离线使用,作为一种快速而方便的数据呈现方式(使用html + js和web浏览器而不是播放文本文件)。我想要的是加载本地文本文件,然后将其一些内容作为html页面的一部分。与我的第一个示例相同,但首先加载文本文件。
答案 0 :(得分:25)
问题是,在文档加载后运行document.write时,它会覆盖整个文档。如果在此之前运行,则不会覆盖它。
您要做的是设置特定元素的innerHtml,例如:
document.getElementById("myDiv").innerHTML="Sup";
答案 1 :(得分:20)
让我们回顾一下浏览器在收到html文件时所做的事情。
现在,现代浏览器还公开了一个文档API,允许您使用javascript完成这些任务。
您可以使用document.open()
打开要写入的文档。您还可以使用document.write()
开始将内容写入文档。最后,您可以使用document.close()
关闭文档以进行编写。由于在您编写之前始终需要打开文档来编写,因此调用document.write()
始终会导致隐式document.open()
。
在整个html体内散布document.write()
次调用是一种常用的技术,用于将字符串内容动态插入到html页面中。
例如,如果您在html文件的正文中执行document.write("<p>holla</p>")
,浏览器将在收到html文件后执行以下操作。
document.write()
,然后将"<p>holla</p>"
写入文档中的特定行,就像字符串已经是html文件的一部分一样!由于document.write()
在解析html文件期间被称为,因此它只会被解析为页面的一部分。 如果您使用document.write()
的方式,那就不足为奇了。相反,您在解析html 之后调用document.write()
。
那么您认为应该怎么做?
正如我之前提到的,需要在将文档写入之前打开文档进行写入。理论上,我们可以附加到现有内容或仅覆盖它。好吧,如果我们附加到内容,我们最终会得到一个无效的html页面,因为新值会出现在结束标记之后。因此,更明智的行为是覆盖内容,而这正是发生的事情。