Hallo,
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.
Das verstehe ich nicht, wieso sollte ein Browser mehr Vergleiche anstellen? Schau dir z.B. mal den KHTML-Code an:
case DOMNode::Contains:
{
DOM::NodeImpl* other = toNode(args[0]);
if (other && node.isElementNode())
{
bool retval = other->isAncestor(&node);
return Boolean(retval);
}
return Undefined();
}
bool NodeImpl::isAncestor( NodeImpl *other )
{
// Return true if other is the same as this node or an ancestor of it, otherwise false
NodeImpl *n;
for (n = this; n; n = n->parentNode()) {
if (n == other)
return true;
}
return false;
}
Das ist deine Methode in C++.
Mathias