Hi, 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.appendChild 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=document.createTextNode("DOM");</script> <table> <tr> <td>elem 1</td> <td>elem 2<script>document.write("location");document.body.appendChild(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. Any help appreciated, Jon.
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.appendChild 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=document.createTextNode("DOM");</script> > <table> > <tr> > <td>elem 1</td> > <td>elem > 2<script>document.write("location");document.body.appendChild(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.getElementsByTagName('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/domInsertionDuringPageLoad/docWriteMixAppendChild.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/
![]() |
0 |
![]() |
Martin Honnen wrote: [...] > 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. > > Count sequence for Safari 1.0.3 (Mac OS 10.2.8): 1,2 ... 12,14,13,15 ... 25,27,26,28 . Hope that helps. -- Fred
![]() |
0 |
![]() |
Fred Oz wrote: > Martin Honnen wrote: > >> perhaps some Safari or Konqueror users can >> report what the test case does for them. >> > > Count sequence for Safari 1.0.3 (Mac OS 10.2.8): > > 1,2 ... 12,14,13,15 ... 25,27,26,28 . Thanks, so Safari exhibits the same problematic combination, document.write of pure text mixed with appendChild seems to change the sequence. -- Martin Honnen http://JavaScript.FAQTs.com/
![]() |
0 |
![]() |