有没有办法使用document.write但写入正文的顶部?

时间:2016-08-14 23:31:17

标签: javascript

所以基本上我有一个外部JS文件,我需要在别人的页面上托管。这个JS文件使用document.write在页面上写HTML。

现在它将HTML嵌入到包含JS文件的位置,但我希望在<body>之后立即将HTML写入页面顶部。

有没有这样做?考虑到嵌入JS文件的人将无法简单地将其放在body标签之后。

4 个答案:

答案 0 :(得分:2)

如果可以,avoid using document.write。以下是插入脚本的常用方法,以便执行:

document.addEventListener('DOMContentLoaded', function(){
    var s = document.createElement('script');
    s.src = "my_script.js";
    document.body.appendChild(s);
}, false);

如果您要添加任何其他HTML,可以使用innerHTML,但有时候最好避免使用它,因为它会替换所有元素(并且可能会破坏之前设置的一些事件侦听器)。相反,您可以使用insertAdjacentHTML。请注意,如果通过此方法添加脚本,则不会执行该脚本:

document.addEventListener('DOMContentLoaded', function(){
    var code = '<style>.class{color:red}</style><div class="class">Hello</div>';
    document.body.insertAdjacentHTML('afterbegin', code);
}, false);

您可以使用以下选项选择附加代码的位置:beforebeginafterbeginbeforeendafterend

答案 1 :(得分:1)

不,document.write在<script>之后内嵌写入HTML。但是您可以修改body元素的innerHtml(或者放在顶部的<div>等),但您可能必须等待HTML首先加载。

看到你无法编辑脚本。您需要做的是将脚本调用放在<div>中并使用CSS将<div>置于顶部。 (或使用内联javascript重新排序页面上的html元素),以便将<div>移动到您想要的位置。

答案 2 :(得分:1)

不要使用document.write,也不要使用innerHTML重新整理整个身体。

您可以使用insertAdjacentHTML插入HTML字符串:

document.body.insertAdjacentHTML('afterbegin', htmlStr);

或者您可以添加一些元素:

var el = document.createElement('div');
// ... insert your data to `el`
document.body.insertBefore(el, document.body.firstChild);

答案 3 :(得分:0)

W3Scools说:

定义和用法 write()方法将HTML表达式或JavaScript代码写入文档。

write()方法主要用于测试:如果在HTML文档完全加载后使用它,它将删除所有现有的HTML。

注意:当此方法不用于测试时,它通常用于将一些文本写入document.open()方法打开的输出流。请参阅下面的“更多示例”。