• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DOMElement::removeAttributeNode()

    (PHP 5, PHP 7)

    Removes attribute

    说明

    publicDOMElement::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.