On Apr 1, 2008, at 18:41, Daniel Glazman wrote:
Henri Sivonen wrote:

How often do people pick a single child by index (with a number know a priori) instead of iterating over children and testing each one for an interesting trait?

Let me turn the problem differently : NodeList and NamedNodeMap are the
normal answers when we query a list of nodes, for instance through
Document.getElementsByTagName() or Element.childNodes, why should this
behave differently and why should the DOM be inconsistent here ?

I prefer iterating with nextSibling null check over iterating with indexed childNodes. The childNodes feature seems to have caused a lot of complexity in DOM implementations--and for little benefit considering that the normal case is forward iteration over children.

For getElementsByTagName returning a list makes sense. However, I think that live lists are a design bug in the DOM. They cause even more trouble in the getElementsByTagName case than in the childNodes case.

Of course, these design decisions cannot be undone at this point, but I don't see why they should be perpetuated in the name of consistency. The Selectors API, for example, returns comatose NodeLists (list dead; nodes pointed to live), which is much better that trying to make those lists live.

childElements would be a filtered list, so making it live for consistency would presumably be a bit more troublesome than keeping childNodes live. Making it comatose would be bad for perf if it is used a lot, though, since each call would instantiate a new comatose list. Moreover, the common implementation pattern is that an Element object itself is the NodeList returned by childNodes, so the same implementation pattern couldn't be used for childElements since the NodeList methods are already taken for the other purpose.

I must add that XPath also allows to select the nth child of a given
element, that Selectors can do the same through
|#myParent > :nth-child(n)|.

Apparently querying the nth element child of an element is NOT that
uncommon:

http://www.mail-archive.com/[EMAIL PROTECTED]/msg20124.html

This talks about first vs. rest. First and last are already special compared to, say, fifth.

http://groups.google.com/group/jquery-en/browse_thread/thread/f49c09bb901f7aa6

This is about every nth, which could be implemented as a forward- iteration pass and is anyway different to just getting nth once.

http://tinyurl.com/2wsxlc
http://www.xml.com/pub/a/2007/01/24/whats-new-in-prototype-15.html?page=4

These aren't use cases.

--
Henri Sivonen
[EMAIL PROTECTED]
http://hsivonen.iki.fi/



Reply via email to