Hallo Mathias,
Einige Browser kennen die Methode contains() und für Gecko ist ein Workaround möglich. Ich denke mal, das ist performanter als das händische Aufsteigen im Baum.
Nein und Ja. ;)
Nein für den Fall, dass bei contains() tatsächlich der Baum traversiert wird. Da wäre meine Methode perfomanter, im worst case muss werden dort nur so viele Vergleiche durchgeführt, wie das Element von der Wurzel des Baumes entfernt ist. Bei der Semantik von contains() müssten dann alle Kindelemente verglichen werden, sprich exponential mehr Vergleiche.
Ja, weeil: Wenn es solche Funktionen gibt, wäre man hinverbrannt neben der reinen Baumstruktur des DOMs für genau diese Fälle zusätzliche Datenstrukturen für andere Zugriffsmöglichkeiten vorzuhalten, wenn auch nicht im JS-DOM exponiert. Und dieser dürften dann sehr viel schneller sein als ein Traversieren des Baum.
Danke übrigens für den Hinweis auf compareDocumentPosition(). Kannte ich noch nicht.
Die prototypische Erweiterung wäre im Grunde nur Gecko notwendig, und da gibt es speziellere DOM-Methoden.
Ich bin mit der Gesamtsitation unzufrieden. Ich bin in der letzen Zeit öfters über Momente gestolpert, in denen ich HTMLElement oder anderes prototypisch hätte erweitern wollen, es ging aber nicht. Ich prangere dies an!
Tim