如何用DOMDocument删除元素?

Kin*_*Kin 34 php domdocument

是否可以从加载中删除元素DOM而不创建新元素?例如这样的事情:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);

foreach($dom->getElementsByTagName('a') as $href)
    if($href->nodeValue == 'First')
        //delete
Run Code Online (Sandbox Code Playgroud)

hak*_*kre 88

通过告知父节点删除子节点来删除节点:

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

查看DOMNode::$parentNode文档DOMNode::removeChild()文档.

另见:

  • 是的,如何做到这一点的选择并不多.我现在添加了一些链接,以使其成为一个真正的答案,但这实际上闻起来像一个重复的候选人.至少有一个人应该选择一些好的相关问题. (2认同)

ale*_*ird 19

我花了一段时间才弄明白,所以这里有一些澄清:

如果要从循环中删除元素(如OP的示例中所示),则需要向后循环

$elements = $completePage->getElementsByTagName('a');
for ($i = $elements->length; --$i >= 0; ) {
  $href = $elements->item($i);
  $href->parentNode->removeChild($href);
}
Run Code Online (Sandbox Code Playgroud)

DOMNodeList文档:如果向后迭代,您可以修改甚至删除DOMNodeList中的节点

  • 你让我省去了很多麻烦。谢谢! (2认同)

sil*_*ire 16

容易:

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