php dom removeChild错误问题

sam*_*sam 3 php xhtml dom

我在尝试删除xhtml中的节点时遇到错误.
代码是:

foreach($post->getElementsByTagName('a') as $key=>$a)
{
    $post->removeChild($a);
}
Run Code Online (Sandbox Code Playgroud)

致命错误:/var/www/content.php(24)中带有"未找到错误"消息的未捕获异常"DOMException":在/var/www/content.php中引发的content-> fetch()#2 {main}第192行

如果我使用img标签,它会删除除一个img节点之外的所有节点,并且没有致命错误.
这里发生了什么?

Yos*_*shi 9

尝试:

$a->parentNode->removeChild($a);
Run Code Online (Sandbox Code Playgroud)


tro*_*skn 5

getElementsByTagName返回一个DOMNodeList.A DOMNodeList是迟到的.例如,如果更改文档,您还将更改节点列表.因此,如果您计划更改文档,则应将节点列表读入数组,然后循环遍历数组.对于读取操作,它将完全作为一个数组工作,所以在这里你会很好.

所以:

$nodes = array();
foreach ($post->getElementsByTagName('a') as $node) {
  $nodes[] = $node;
}
foreach ($nodes as $node) {
  $post->removeChild($node);
}
Run Code Online (Sandbox Code Playgroud)

  • @troelskn @sam问题不是你在循环中更改文档,而是`$ post-> getElementsByTagName`搜索`$ post`下面的整个节点树.因此,如果找到的`$ node`不是`$ post`的直接子节点,那么使用`$ post-> removeChild`就会产生错误. (2认同)