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_dumps 告诉我尝试删除了这些属性,当这个循环结束后,所有属性仍然存在。

我通过反向迭代属性列表解决了这个问题
<?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 不会返回 bool 类型,而是返回 DOMAttr 对象。
To Top