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