Парсер DOM: удалять только определенные атрибуты

Как я могу использовать парсер 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> принять

Является ли это возможным?

Мой рабочий код с другого поста, который я сделал,

 $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

Вам нужно сделать это вручную.

DOM обрабатывает атрибуты HTML, а не свойства CSS.

Вам нужно получить доступ к атрибуту style , explode его значение с помощью ; как разделитель, затем зациклируйте массив, ища значение, которое вы хотите отменить.

Это возможно только с DOM. DOM предоставляет анализируемую версию атрибута style через свойство element.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's $('*') для итерации по каждому элементу, но, конечно же, вы можете сделать это с помощью просто DOM.

Вот JsFiddle, чтобы играть с: http://jsfiddle.net/NbN3S/

Одна из трудностей заключается в том, что имена, по-видимому, зависят от браузера, к сожалению: например, text-decoration отделяется Firefox от -moz-* стилей -moz-* .