On Apr 2, 2008, at 2:44 AM, Jonas Sicking wrote:


Henri Sivonen wrote:
On Apr 2, 2008, at 00:48, Boris Zbarsky wrote:
OK. So item() would be available on Element after casting it to NodeList in those implementations. I guess you're saying that the cast would not longer be unambiguous if there were multiple NodeLists that might make sense? So childElements couldn't be implemented with a |return this;|?

That doesn't seem like such a terrible implementation burden to me, to be honest...
I'm not claiming it would be awfully hard, but it does change the impact of Element Traversal from adding four or five methods on an existing class (mere code footprint; super-simple) to adding more run-time object instances. And then, there are issues like should childElements return the same object every time. And if yes, then the implementor needs to add a new pointer to each element node or to add a hashtable on the owner document or something along those lines. Again, not awfully hard, but still more complex than just adding convenience methods on an existing class.

Sure it's more complex, but it's still trivial.

In WebKit, it would be more than one line of code to add a new kind of NodeList. Not a ridiculous amount of code though.

However, I think live NodeLists are an anti-pattern. They tend to be horrible for performance in the face of mutation (and even when there isn't mutation, extra objects are allocated). This is part of why I strongly argued for querySelectorAll to return a non-live list. And using indexing is not really any more convenient than using next/ previous methods.

I can live with the editor's decision either way on this one.

Cheers,
Maciej


Reply via email to