Javascript document.write()是否覆盖文档?

Javascript document.write()是否覆盖文档?,javascript,html,xmlhttprequest,document.write,Javascript,Html,Xmlhttprequest,Document.write,这: 在html中调用,如: function myFunction() { document.write("sup"); } 这样称呼: function loadFile(uri) { var r = new XMLHttpRequest(); document.write("trying to open: " + uri); r.open('GET', uri, true); r.send(null); r.onreadystatechan

这:

在html中调用,如:

function myFunction()
{
    document.write("sup");
}
这样称呼:

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");
}

加载文件(“filename.txt”);
似乎正在覆盖我的整个html文件。也就是说,当我在Firefox中运行它时,它只显示字符串
sup
(这是页面的全部内容),但页面似乎仍在加载(FF的加载图标仍在那里,显然是无限的)


首先,这将仅用于本地、脱机,作为一种快速便捷的数据显示方式(使用html+js和web浏览器,而不是纯文本文件)。我想要的是加载一个本地文本文件,然后将其部分内容作为html页面的一部分。与我的第一个示例相同,但首先加载文本文件。

问题是,当加载文档后运行document.write时,它会覆盖整个文档。如果在此之前运行,则不会覆盖它

您要做的是设置特定元素的innerHtml,例如:

<div id="myDiv">
    <script>loadFile("filename.txt");</script>
</div>

让我们看一下浏览器在接收html文件时的操作

  • 窗口文档将打开以供写入。想象一下打开一个文本文件
  • 浏览器将内容写入文档。在这一步中发生了很多神奇的事情——创建对象并将html呈现为方框
  • 窗口文档关闭文档。有点像保存文本文件
  • 现在,现代浏览器还公开了一个文档API,允许您使用javascript精确地执行这些任务

    您可以使用
    document.open()
    打开文档进行编写。您还可以使用
    document.write()
    开始向文档写入内容。最后,您可以使用
    document.close()
    关闭文档进行编写。由于在编写之前始终需要打开文档进行编写,因此调用
    document.write()
    始终会导致隐式
    document.open()

    在html正文中插入
    document.write()
    调用是一种常用的技术,用于将字符串内容动态插入html页面

    例如,如果在html文件主体中执行
    document.write(holla

    ”)
    ,浏览器将在收到html文件后执行以下操作

  • 打开文档进行写作
  • 开始将html内容写入文档。
    • JavaScript引擎将在遇到它时执行
      document.write()
      ,然后将
      “holla

      写入文档中的特定行,就像字符串已经是html文件的一部分一样!由于在解析html文件的过程中调用了
      document.write()
      ,因此它只是作为页面的一部分进行解析
  • 关闭文档以进行编写。解析完成
  • 如果您就是这样使用
    document.write()
    ,那也就不足为奇了。相反,在解析html后调用
    document.write()

    那么你认为会发生什么


    正如我前面提到的,在将文档写入之前,需要打开文档进行编写。理论上,我们可以附加到现有内容,也可以直接覆盖它。好的,如果我们附加到内容中,我们将得到一个无效的html页面,因为新值将出现在结束标记之后。因此,更明智的行为是覆盖内容,而这正是发生的情况。

    是的,正如您所说的,在加载页面后调用时会覆盖文档。如果您想操作现有的DOM,应该先学习一些基本教程。linstantnoodles解释了这个文档。写得非常好,您可能会尝试使用这种脚本注入技术,但是
    <div id="myDiv">
        <script>loadFile("filename.txt");</script>
    </div>
    
    document.getElementById("myDiv").innerHTML="Sup";