Henri Sivonen wrote:
The childNodes feature seems to have caused a lot of complexity in DOM implementations

Really? What sort? I'm only familiar with the Gecko implementation here, but I don't see it causing extra complexity there...

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.

There are tradeoffs both ways. Which one is better really depends on the expected use cases. If you expect to walk the whole list, comatose makes some sense.

childElements would be a filtered list, so making it live for consistency would presumably be a bit more troublesome than keeping childNodes live.

Yes, but no more trouble than keeping getElementsByTagName() live. In fact, in Gecko it could reuse almost all of the same code. Here is the implementation of getElementsByTagName:

 nsContentList *list =
   new nsContentList(this, nameAtom,  kNameSpaceID_Unknown);

Here would be the implementation of a live childElements (this is the entirety of the code that would have to be written, apart from the idl and function declaration/return boilerplate):

  nsContentList* list =
    new nsContentList(this, nsGkAtoms::_asterix,
                      kNameSpaceID_Wildcard, PR_FALSE);

All the rest is already handled by the nsContentList class, because it's needed anyway to handle various other NodeLists in the DOM.

Or from another point of view, childElements is just like the tBodies NodeList on HTMLTableElement, except it doesn't care about the namespace/localname of the child element.

Moreover, the common implementation pattern is that an Element object itself is the NodeList returned by childNodes

Really? You mean document.body.item(5) does the same thing as document.body.childNodes.item(5)? And that this is "common"? I must have missed it....

-Boris


Reply via email to