Reviewed by Kevin.
[WebKit-https.git] / WebCore / khtml / xml / dom_nodeimpl.cpp
index cfe738631d277e7458e40bc953070067027f4332..b6ffb4fd0234824faae3db014d58baba1ac7d4c8 100644 (file)
@@ -2272,6 +2272,30 @@ NodeImpl *NodeListImpl::recursiveItem ( unsigned long &offset, NodeImpl *start )
     return 0; // no matching node in this subtree
 }
 
     return 0; // no matching node in this subtree
 }
 
+NodeImpl *NodeListImpl::itemById (const DOMString& elementId) const
+{
+    if (rootNode->isDocumentNode()) {
+        DOM::NodeImpl *node = static_cast<DocumentImpl *>(rootNode)->getElementById(elementId);
+        if (nodeMatches(node))
+            return node;
+
+        return 0;
+    }
+
+    unsigned long l = length();
+
+    for ( unsigned long i = 0; i < l; i++ ) {
+        DOM::NodeImpl *node = item(i);
+        
+        if ( static_cast<ElementImpl *>(node)->getIDAttribute() == elementId ) {
+            return node;
+        }
+    }
+
+    return 0;
+}
+
+
 void NodeListImpl::rootNodeSubtreeModified()
 {
     isCacheValid = false;     
 void NodeListImpl::rootNodeSubtreeModified()
 {
     isCacheValid = false;     
@@ -2307,13 +2331,15 @@ NodeImpl *ChildNodeListImpl::item ( unsigned long index ) const
     return n;
 }
 
     return n;
 }
 
-bool ChildNodeListImpl::nodeMatches( NodeImpl */*testNode*/ ) const
+bool ChildNodeListImpl::nodeMatches(NodeImpl *testNode) const
 {
 {
-    return true;
+    return testNode->parentNode() == rootNode;
 }
 
 TagNodeListImpl::TagNodeListImpl(NodeImpl *n, NodeImpl::Id _id, NodeImpl::Id _idMask )
 }
 
 TagNodeListImpl::TagNodeListImpl(NodeImpl *n, NodeImpl::Id _id, NodeImpl::Id _idMask )
-    : NodeListImpl(n), m_id(_id & _idMask), m_idMask(_idMask)
+    : NodeListImpl(n), 
+      m_id(_id & _idMask), 
+      m_idMask(_idMask)
 {
 }
 
 {
 }