DOM parser: remove certain attributes only

吃可爱长大的小学妹 提交于 2019-12-31 02:39:26

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!