PHP DOMDocument removeChild()仅删除目标类的第一个实例

时间:2015-12-17 18:42:14

标签: php domdocument removechild

我需要从HTML文档中删除特定类的所有实例(仅分配给div)。这是我使用的代码片段:

$dom = new DOMDocument;
    $dom->loadHTML($meaning);
foreach ($dom->getElementsByTagName('div') as $node) {
        if($node->getAttribute('class') == "someclass"){
            $node->parentNode->removeChild($node);
        }
    }

这样可以正常工作,除了它只删除所述类的第一次出现,其余部分留下。这是正常的行为吗?我应该在代码中修改哪些内容以确保删除属于此类的所有节点?

1 个答案:

答案 0 :(得分:1)

给它一个机会。关键是使用DomNodeList::item(),您将在下面看到:

$dom = new DOMDocument();
$dom->loadHTML($meaning);

/** @var DomNodeList $divs */
$divs = $dom->getElementsByTagName('div');

for ($i = 0; $i < $divs->length; $i++) {
    /** @var DomElement $node */
    $node = $divs->item($i);
    if ($node->getAttribute('class') == 'someclass') {
        $node->parentNode->removeChild($node);
        $i--; // Since we just removed an element, we need to readjust our pointer.
    }
}