PHP Conference Japan 2024

DOMElement::removeAttributeNode

(PHP 5, PHP 7, PHP 8)

DOMElement::removeAttributeNode移除屬性

說明

public DOMElement::removeAttributeNode(DOMAttr $attr): DOMAttr|false

從元素中移除屬性 attr

參數

attr

屬性節點。

返回值

成功時返回 true,失敗時返回 false

錯誤/例外

DOM_NO_MODIFICATION_ALLOWED_ERR

如果節點是唯讀的,則拋出此例外。

DOM_NOT_FOUND_ERR

如果 attr 不是元素的屬性,則拋出此例外。

另請參閱

新增註釋

使用者貢獻的註釋 1 則註釋

xr07354 at gmx dot de
11 年前
基本說明:我使用的是 Ubuntu 13.04 軟體庫中的 PHP5.4.9。我的程式碼的目的是遞迴迭代 HTML 原始碼(作為 DomDocument)並清除所有在 Epub 檔案中無效的內容(例如,段落中的 align 屬性在 Epub 中無效)。

首先:今天我嘗試使用以下簡單程式碼從 DOMElement 中移除屬性
<?php
for ( $k=0; $k < $element->attributes->length; $k++) {
if(
/* 某些規則 */ ){
var_dump( $element->attributes->item($k)->nodeName);
$element->removeAttributeNode( $element->attributes->item($k));
}
}
?>
不幸的是,即使這些 var_dump 告訴我已嘗試刪除它們,但迴圈結束後所有屬性仍然存在。

我透過反向迭代屬性列表解決了這個問題
<?php
for ( $k = $element->attributes->length - 1; $k >= 0; --$k) {
if(
/* 相同規則 */ ){
var_dump( $element->attributes->item($k)->nodeName);
$element->removeAttributeNode( $element->attributes->item($k));
}
}
?>
第二點:DOMElement::removeAttributeNode 並不會回傳布林值,而是回傳一個 DOMAttr 物件。
To Top