问题
How can I use DOM parser to remove all attributes in span tags but except these two attributes,
<span style="text-decoration: underline;">cultura</span>
accept
<span style="text-decoration: line-through;">heart</span>
accept
reject this,
<span style="font-family: " lang="EN-US">May</span>
accept
Is it possible?
My working code from the other post I made,
$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();
But this code will remove all attributes inside the span
tags...
回答1:
You need to do it manually.
DOM handles HTML attributes, not CSS properties.
You need to access the style attribute, explode
it's value using ;
as a delimiter, then loop the array looking for the value you want to unset.
回答2:
This is entirely possible with DOM only. DOM exposes a parsed version of the style
attribute through the element.style property.
$('*').each(function() {
var s = this.style;
for (var i = s.length - 1; i >= 0; i--)
if (s[i] != 'font-weight')
s.removeProperty(s[i]);
});
The above code removes every style except font-weight
.
This uses jQuery's $('*')
to iterate over every element, but of course you can do it the hard way using just DOM.
Here's a JsFiddle to play with: http://jsfiddle.net/NbN3S/
One difficulty with this is that the names appear to be browser-dependent, unfortunately: for example, text-decoration
is taken apart by Firefox into a bunch of -moz-*
styles.
来源:https://stackoverflow.com/questions/6793224/dom-parser-remove-certain-attributes-only