是否有可能删除加载DOM
元素,而无需创建一个新的?例如这样的事情:如何用DOMDocument删除元素?
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('a') as $href)
if($href->nodeValue == 'First')
//delete
是否有可能删除加载DOM
元素,而无需创建一个新的?例如这样的事情:如何用DOMDocument删除元素?
$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);
(复制)完全一样,用户hakre ... – 2013-09-10 17:39:16
@PeterKrauss我们回答在完全相同的时间,奇怪的是,我没有得到任何upvotes =/ – silkfire 2013-09-11 07:47:44
是的,对不起(!)...现在我看到的时候。需要删除我的评论? – 2013-09-11 19:20:12
这花了我一段时间来弄清楚,所以这里的一些说明:
如果你在一个循环中删除从元素(如OP的例子),你需要循环向后
$elements = $completePage->getElementsByTagName('a');
for ($i = $elements->length; --$i >= 0;) {
$href = $elements->item($i);
$href->parentNode->removeChild($href);
}
DOMNodeList documentation:您可以修改,甚至删除节点从的DOMNodeList如果你迭代向后
的可能重复[PHP:无法删除的DomDocument节点(http://stackoverflow.com/questions/3602207/php-cant-remove-node-from-domdocument) – hakre 2013-03-07 13:42:46