2012-04-23 16 views
4

所以這不起作用:拆除的DOMNode所有屬性在foreach循環

 foreach ($element->attributes as $attribute) { 
      $element->removeAttribute($attribute->name); 
     } 

如果節點有兩個屬性,它只是刪除第一個。

我嘗試沒有成功克隆DOMNamedNodeMap:

 $attributesCopy = clone $element->attributes; 
     foreach ($attributesCopy as $attribute) { 
      $element->removeAttribute($attribute->name); 
     } 

還是隻刪除第一個屬性。

這個問題在這裏解釋:http://php.net/manual/en/class.domnamednodemap.php 顯然它是一個功能,而不是一個錯誤。但評論中沒有提到解決方案。

+0

嘗試回顯$ attribute->名稱並檢查它是否正在更改? – doNotCheckMyBlog 2012-04-23 13:26:38

+0

你能爲我們提供你正在使用的DOM樹嗎? – 2012-04-23 13:28:13

回答

7

簡單:

$attributes = $element->attributes; 
while ($attributes->length) { 
    $element->removeAttribute($attributes->item(0)->name); 
} 

由於屬性集合自動只要一個屬性被刪除重新索引,只是繼續,直到沒有剩下移除屬性爲零。