molily: Befindet sich ein Element in einem bestimmten anderen?

Beitrag lesen

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:

ecma/kjs_dom.cpp

case DOMNode::Contains:
    {
      DOM::NodeImpl* other = toNode(args[0]);
      if (other && node.isElementNode())
      {
          bool retval = other->isAncestor(&node);
          return Boolean(retval);
      }
      return Undefined();
    }

xml/dom_nodeimpl.cpp

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