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