JonQuark wrote:
I suspect this is a common question but I've read the FAQ and searched
the archives and couldn't find it. In a script embedded in the body of
the page I want to quickly find the last node that was created and
appendChild nodes to it. I can't just use document.body.a ppendChild as
the last node is likely to be a grandchild or great-grandchild of body.
I know that I could document.write an element with an id and then
getElementById but this slow and clunky, there must be a faster way,
document.write( ) knows where to put its output.
In case I've not made myself clear:
[...inside an HTML document...]
Some text
<script>text=do cument.createTe xtNode("DOM");</script>
<table>
<tr>
<td>elem 1</td>
<td>elem
2<script>docume nt.write("locat ion");document. body.appendChil d(text);</script></td>
</tr>
<tr>
<td>elem 3</td>
<td>elem 4</td>
</tr>
</table>
[...end of snippet...]
I'd like to replace document.body with something that would make the
text DOM appear after location rather than after the table and not
depend on the containing td having an id that I getElementById for.
It is a bit tricky, if you have a script that is executed during page
load and wants to insert content during page load then if the browser
plays nice you could assume that document.getEle mentsByTagName( 'script')
can be used to find the current <script> element as the last script
element in that collection and then you can use appendChild on its
parentNode to insert content at the correct position.
I have made the following test case:
<http://home.arcor.de/martin.honnen/mozillaBugs/domInsertionDur ingPageLoad/docWriteMixAppe ndChild.html>
It shows that mixing document.write of pure text with appendChild leads
to inconsistent behavior in different browsers (tested with IE 6,
Netscape 7.2, Opera 7.50) so if you really think you need to use DOM
Core stuff like appendChild during page load then do not mix it with
document.write of pure text, the order of dynamically inserted content
would then differ depending on the browser.
But of course there could be other browsers where even the strategy of
appending to the parentNode of the last script element doesn't yield the
desired behavior, perhaps some Safari or Konqueror users can report what
the test case does for them.
--
Martin Honnen
http://JavaScript.FAQTs.com/