使用body onload和document.write时忽略样式表

deu*_*on0 5 javascript

我正在搞乱JavaScript实验来感受它并且已经遇到了问题.这是我的HTML代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript" src="testing.js"></script>
</head>
<body onload="writeLine()">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是JavaScript testing.js:

function writeLine()
{
    document.write("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)

这是样式表styles.css:

html, body {
    background-color: red;
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的例子,但我可能选择了一个尴尬的例子,在body标签中使用on-load.所以上面的代码加载并运行函数,但样式表什么都不做,除非我删除头部的脚本标记.我已经尝试将脚本标记放在其他地方,但没有任何作用.我已经研究了如何正确链接到JavaScript文件的在线,并没有找到没有明确的解决方案,任何人都可以指出我的错误?

我之前使用过JavaScript,但是在我再使用它之前,我想要从头开始清楚地理解它

Tom*_*icz 2

您的问题是document.write()在错误的时刻被调用*。此方法按照预期在页面仍在加载时工作,在页面中的当前位置打印给定文本。因为您在加载整个页面时调用它,所以结果是意外的(未定义?)

相反,你应该直接操作

function writeLine() {
    var text = document.createTextNode("Hello World!");
    document.body.appendChild(text);
}
Run Code Online (Sandbox Code Playgroud)

实际上,在 Opera 浏览器中,我看到红色背景几毫秒,然后又变回白色。尝试注释掉document.write()- 背景如预期的那样。<script>此外,您应该在 的末尾包含标签body,但这并不能解决您的问题。

* 说实话,现在没有打电话的好时机document.write(),避免它