如何使用DOM解析器删除span标记中的所有属性,但除了这两个属性
<span style="text-decoration: underline;">cultura</span>
接受
<span style="text-decoration: line-through;">heart</span>
接受
拒绝此,
<span style="font-family: " lang="EN-US">May</span>
接受
有可能吗?
我工作的代码来自我制作的其他post,
$content = '
<span style="text-decoration: underline;">cultura</span>l <span style="text-decoration: line-through;">heart</span>
<span style="font-family: " lang="EN-US">May</span>
';
$dom = new DOMDocument();
$dom->loadHTML($content);
foreach( $dom->getElementsByTagName( "span" ) as $span )
{
foreach( $span->attributes as $attrib )
{
$span->removeAttributeNode( $attrib );
}
}
$content = $dom->saveHTML();
但是此代码将删除span
代码中的所有属性...
答案 0 :(得分:1)
您需要手动执行此操作。
DOM处理HTML属性,而不是CSS属性。
您需要使用explode
作为分隔符访问样式属性,;
它的值,然后循环查找要取消设置的值的数组。
答案 1 :(得分:0)
仅使用DOM完全可以实现。 DOM通过element.style
属性公开style
属性的解析版本。
$('*').each(function() {
var s = this.style;
for (var i = s.length - 1; i >= 0; i--)
if (s[i] != 'font-weight')
s.removeProperty(s[i]);
});
上述代码会删除除font-weight
以外的所有样式。
这使用jQuery的$('*')
来迭代每个元素,但当然你可以使用DOM来解决这个问题。
这是一个可以玩的JsFiddle:http://jsfiddle.net/NbN3S/
这样做的一个难点是,名称似乎依赖于浏览器,不幸的是:例如,text-decoration
被Firefox拆分为一堆-moz-*
样式。