我在PHP中有一个DomElement。我想从元素及其所有子元素的样式属性中删除一些特定样式。我知道它应该是递归的。
例如我有:
<a href="" style="top:10px;left:4px;margin:4px"><img style="top:3px"/></a>
我删除top
样式。它转换为:
<a href="" style="left:4px;margin:4px"><img style=""/></a>
答案 0 :(得分:0)
使用JQUERY
尝试以下代码{{1}}
答案 1 :(得分:0)
对父节点使用以下函数:
private function prevent_html_style_properties($element){
if($element->nodeType != XML_ELEMENT_NODE)
return $element;
$element->removeAttribute('class');
if($element->hasAttribute('style')){
$style = $element->getAttribute('style');
$existingDeleteAttrList = array();
$attrList = [
'height',
'position',
'top'];
$style_parts = explode(';', $style);
foreach($attrList as $attr){
if(strpos($style, $attr) !== false)
$existingDeleteAttrList[] = $attr;
}
$new_attr_value = '';
foreach($style_parts as $style_part){
$attr_is_safe = true;
foreach($existingDeleteAttrList as $attr){
if(strpos($style_part, $attr) !== false) {
$attr_is_safe = false;
break;
}
}
if($attr_is_safe)
$new_attr_value .= $style_part . ';';
}
$element->setAttribute('style', $new_attr_value);
}
$children = $element->childNodes;
foreach ($children as $child)
{
$element->replaceChild($this->prevent_html_tag_styles($child), $child);
}
return $element;
}
用法:
$element = $this->prevent_html_style_properties($element);
一些解释:
XML_ELEMENT_NODE
。replaceChild
来修复其直接子项,依此类推。