HTML file …
<!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=UTF-8">
<script type="text/javascript" src="src/myJS.js"></script>
</head>
<body onload="myJS.myFunction();">
<p id="p01"></p>
</body>
</html>
External Javascript file (called myJS.js for convenience) …
myJS = {
myFunction: function()
{
//This works
document.write("Hello world. ");
//This does not work
document.getElementById("p01").appendChild(document.createTextNode("Hello world, again"));
}
};
My best guess is that the node p01 has not been created when myJS is executed, but I thought that onload would do the right thing with it.
If your external js really contains both lines of code you posted, the problem is that
document.writeis overwriting the whole HTML (it behaves like that as soon as the DOM is loaded). ThengetElementByIdwon’t find any#p01, because it won’t exist anymore.If you simply remove the
document.writecall, your code is supposed to work (see a live example).