2013-03-07 81 views
26

是否有可能刪除加載DOM元素,而無需創建一個新的?例如這樣的事情:如何用DOMDocument刪除元素?

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

foreach($dom->getElementsByTagName('a') as $href) 
    if($href->nodeValue == 'First') 
     //delete 
+0

的可能重複[PHP:無法刪除的DomDocument節點(http://stackoverflow.com/questions/3602207/php-cant-remove-node-from-domdocument) – hakre 2013-03-07 13:42:46

回答

72

你告訴父節點刪除子刪除節點:

$href->parentNode->removeChild($href); 

DOMNode::$parentNodeDocsDOMNode::removeChild()Docs

看得那麼清楚:

+2

呵呵:)我們幾乎在同一秒鐘給了*相同的*答案。 – hek2mgl 2013-03-07 13:44:22

+2

是的,沒有太多的選擇如何做到這一點。我現在添加了一些鏈接,使其成爲實際的答案,但這實際上是一個重複的候選人的氣味。至少有一個人應該選擇一些好的相關問題。 – hakre 2013-03-07 13:48:55

15

輕鬆:

$href->parentNode->removeChild($href); 
+0

(複製)完全一樣,用戶hakre ... – 2013-09-10 17:39:16

+2

@PeterKrauss我們回答在完全相同的時間,奇怪的是,我沒有得到任何upvotes =/ – silkfire 2013-09-11 07:47:44

+1

是的,對不起(!)...現在我看到的時候。需要刪除我的評論? – 2013-09-11 19:20:12

7

這花了我一段時間來弄清楚,所以這裏的一些說明:

如果你在一個循環中刪除從元素(如OP的例子),你需要循環向後

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

DOMNodeList documentation:您可以修改,甚至刪除節點從的DOMNodeList如果你迭代向後