5

所以这不起作用:

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

如果节点有 2 个属性,它只删除第一个。

我尝试克隆 DOMNamedNodeMap 没有成功:

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

仍然只删除第一个属性。

这个问题在这里解释:http: //php.net/manual/en/class.domnamednodemap.php 显然这是一个特性,而不是一个错误。但是评论中没有提到解决方案。

4

1 回答 1

12

简单地:

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

由于属性集合会在删除属性后立即重新索引,因此只需继续删除属性零,直到没有留下任何属性。

于 2012-04-23T13:37:25.150 回答