It seems that experienced web developers frown upon using document.write()
in JavaScript when writing dynamic HTML.
Why is this? and what is the correct way?
document.write()
will only work while the page is being originally parsed and the DOM is being created. Once the browser gets to the closing </body>
tag and the DOM is ready, you can't use document.write()
anymore.
I wouldn't say using document.write()
is correct or incorrect, it just depends on your situation. In some cases you just need to have document.write()
to accomplish the task. Look at how Google analytics gets injected into most websites.
After DOM ready, you have two ways to insert dynamic HTML (assuming we are going to insert new HTML into <div id="node-id"></div>
):
Using innerHTML on a node:
var node = document.getElementById('node-id');
node.innerHTML('<p>some dynamic html</p>');
Using DOM methods:
var node = document.getElementById('node-id');
var newNode = document.createElement('p');
newNode.appendChild(document.createTextNode('some dynamic html'));
node.appendChild(newNode);
Using the DOM API methods might be the purist way to do stuff, but innerHTML
has been proven to be much faster and is used under the hood in JavaScript libraries such as jQuery.
Note: The <script>
will have to be inside your <body>
tag for this to work.