Можно ли удалить элемент из загруженного DOM
без создания нового? Например, что-то вроде этого:
$dom = new DOMDocument('1.0', 'utf-8'); $dom->loadHTML($html); foreach($dom->getElementsByTagName('a') as $href) if($href->nodeValue == 'First') //delete
Вы удаляете узел, указывая родительскому узлу на удаление дочернего элемента:
$href->parentNode->removeChild($href);
См. DOMNode::$parentNode
Docs и DOMNode::removeChild()
Docs .
См. Также:
Без труда:
$href->parentNode->removeChild($href);
Это заняло у меня некоторое время, чтобы понять, так вот некоторые разъяснения:
Если вы удаляете элементы из цикла (как в примере OP), вам нужно зацикливать назад
$elements = $completePage->getElementsByTagName('a'); for ($i = $elements->length; --$i >= 0; ) { $href = $elements->item($i); $href->parentNode->removeChild($href); }
Документация DOMNodeList : вы можете изменять и даже удалять узлы из DOMNodeList, если вы повторяете назад