2

DOMDocument::getElementsByTagName() 和 DOMXPath::query() 都返回一个 DOMNodeList。然而,它们的工作方式似乎不同:

// Works as expected, removes all scripts
$r=$doc->getElementsByTagName('script');
while($r->length){
    $el=$r->item(0);
    $el->parentNode->removeChild($el);
}

// Error
$r=$xpath->query('//comment()');
while($r->length){
    $el=$r->item(0);
    $el->parentNode->removeChild($el);
}

// Works as expected, removes all comments
$r=$xpath->query('//comment()');
foreach($r as $el){
    $el->parentNode->removeChild($el);

}

为什么它们不同?返回的 DOMNodeListgetElementsByTagName()会在删除第一个节点时自动将索引向下移动,而返回的 DOMNodeListquery()只会使第一个索引为空。还有其他区别吗?

4

0 回答 0