473,407 Members | 2,629 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,407 software developers and data experts.

Finding last node

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.

Jul 23 '05 #1
6 1790


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/
Jul 23 '05 #2
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
Jul 23 '05 #3


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/
Jul 23 '05 #4
Hi Martin,

Thank you very much for your informative reply. I had considered
getElementByTagName but the application I'm working on is already
pushing Javascript quite hard and such a script would be embedded
literally hundreds of times inside a single big page. Building the array
of scripts in each script will be a very slow process. I was hoping that
there was going to be a variable perhaps called something like
document.currentNode that is updated as the page is created.

Thanks again for your help.

Jon.
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Jul 23 '05 #5
Jon Levell wrote on 13 feb 2005 in comp.lang.javascript:
Thank you very much for your informative reply. I had considered
getElementByTagName but the application I'm working on is already
pushing Javascript quite ...


Please either answer with email, or if you answer on usenet, quote the
essentials of the posting you are answering on.

Netiquette is sensible.

--
Evertjan.
The Netherlands.
(Replace all crosses with dots in my emailaddress)

Jul 23 '05 #6


Jon Levell wrote:
the application I'm working on is already
pushing Javascript quite hard and such a script would be embedded
literally hundreds of times inside a single big page. Building the array
of scripts in each script will be a very slow process.
Well with the DOM collections are live so as the example page
demonstrates you only need to call
document.getElementsByTagName('script') once, the DOM implementation
then takes care of updating the collection automatically without any
need to call again. But of course that automatic updating will also take
time if you have hundreds of script elements.
I was hoping that
there was going to be a variable perhaps called something like
document.currentNode that is updated as the page is created.


I don't think the W3C DOM has anything like that as it is not really
concerned with script manipulating the DOM tree while it is built.
And I don't know of any browser exposing such a property.

--

Martin Honnen
http://JavaScript.FAQTs.com/
Jul 23 '05 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Jamie Green | last post by:
Using MSXML3.0, with the Dom SelectionLanguage set to Xpath I am trying to query the following document <Root> <Child>Name</Child> <Child>John</Child> <Child>Smith</Child> <Child>23</Child>...
4
by: Victor Engmark | last post by:
When looking for a method to fetch unique elements and counting the number of occurences of each of them, I found quite a lot of gross examples of complex XSL. But after realizing the subtle...
0
by: CoolPint | last post by:
I am trying to write a generic heapsort (of course as a self-exercise) with Iterator interface: something like blow.... But I got into trouble finding out the Iterator to the Child node. If...
7
by: Scott W Gifford | last post by:
Hello, I'm considering using XML to represent a stream of location information, and XPath to do queries against it. I've got most of it figured out (at least on paper), but I can't figure out...
6
by: Jay Bienvenu | last post by:
I have the following Visual Basic .NET code in an ASP.NET project: ' ... Dim xdStructure As XmlDocument Dim xnStructureRoot As XmlNode xdStructure = New XmlDocument...
2
by: TT (Tom Tempelaere) | last post by:
Hey there, I'm having trouble finding the right XPath expression. The XML file I'm parsing contains an element Heads which contains sereveral Head elements. These Head elements have several Row...
2
by: Lior | last post by:
Hi, I have an ASP.NET website that crashes under heavy load. I use a SQL Server DB. I get around 5500 hits per day. I keep getting the timeout expieried connection pool error. Sometimes it even...
6
by: meh | last post by:
I can figure out the total number of nodes in a given tree but what I'd like to know is what is the Selected Nodes relationship to the entire tree i.e This is node n out of nnn nodes. In most of...
2
by: skrebbel | last post by:
Is there any faster/easier way of finding a child node of a certain DOMNode object than doing something like function getChildByTagname($curnode, $name) { foreach($curnode->childNodes as...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.