DOMElement::removeAttributeNode()
(PHP 5, PHP 7)
Removes attribute
说明
public DOMElement::removeAttributeNode(DOMAttr$oldnode): bool
Removes attribute$oldnodefrom the element.
参数
- $oldnode
The attribute node.
返回值
成功时返回TRUE
,或者在失败时返回FALSE
。
错误/异常
DOM_NO_MODIFICATION_ALLOWED_ERR
Raised if the node is readonly.
DOM_NOT_FOUND_ERROR
Raised if$oldnodeis not an attribute of the element.
参见
- DOMElement::hasAttribute() Checks to see if attribute exists
- DOMElement::getAttributeNode() Returns attribute node
- DOMElement::setAttributeNode() Adds new attribute node to element
Basic: I use PHP5.4.9 from Ubuntu 13.04 repository. The aim of my code is to iterate HTML source (as a DomDocument) recursively and cleanup everything that is not valid to be used inside Epub files (i.e. and attribute align is not valid for paragraphs in Epubs). FIRST: Today I tried removing attributes from a DOMElement using this simple code: <?php for ( $k=0; $k < $element->attributes->length; $k++) { if( /* some rule */ ){ var_dump( $element->attributes->item($k)->nodeName); $element->removeAttributeNode( $element->attributes->item($k)); } } ?> Unfortunately all attributes still existed when this loop was finished, even if these var_dumps told me that deleting them was tried. I solved this problem iterating the attributes list backward: <?php for ( $k = $element->attributes->length - 1; $k >= 0; --$k) { if( /* same rule */ ){ var_dump( $element->attributes->item($k)->nodeName); $element->removeAttributeNode( $element->attributes->item($k)); } } ?> SECOND: DOMElement::removeAttributeNode does NOT return a bool but a DOMAttr object.