У меня неприятная ситуация, когда я иногда получаю html-теги из cms, которые включают встроенные стили с! Important в них. Мне нужно проанализировать их и отобразить в приложении React.
Я ничего не могу с этим поделать, и все стили, к которым прикреплен! Important, удаляются React.
Есть ли способ использовать html-react-parser для сохранения этих стилей, чтобы они оставались в теле?
Извините, если это не подходящее место, чтобы спросить об этом, не стесняйтесь закрыть эту проблему в этом случае.
Спасибо!
@linkurzweg Возможно, вам не понадобится html-react-parser
. Смотрите скрипку . Просто помните об уязвимости XSS, если вы используете опасноSetInnerHTML .
@remarkablemark Ах, я даже не подумал об
В моем случае нет реального риска для XSS, так что все должно быть в порядке.
Проблема в том, что мне все еще нужно запускать все через html-react-parser, потому что тело может содержать элементы, которые мне нужно заменить на какой-то компонент React. Только если у элемента есть атрибут стиля, я могу отобразить его как есть.
Есть ли способ преобразовать domNode обратно в строку при синтаксическом анализе?
Большое спасибо!
@linkurzweg Вы можете передать свой domNode в domToReact()
и он отобразит его как элемент React. См. Примеры замены .
@remarkablemark Еще раз спасибо! Я знаю это, но не понимаю, как это могло бы помочь в моем случае?
Мне все равно нужно вернуть domNode в строку, которую я мог бы использовать с опасноSetInnerHTML, или я чего-то не получаю?
@linkurzweg Я не слежу за вашим вариантом использования. Можете ли вы привести пример с использованием CodeSandbox , JSFiddle или Repl.it ?
@remarkablemark см. скрипку здесь: https://jsfiddle.net/9bezs1rt/.
Итак, это примерно так: я получаю одну огромную строку со всем html в ней, которую нужно каким-то образом проанализировать (может содержать теги сценария, фреймы, встраиваемые в социальные сети и т. Д.). Мне нужно перебрать все узлы dom и обработать множество разных случаев.
Если к узлу dom прикреплены некоторые встроенные стили, я могу предположить, что мне не нужно заменять его каким-либо компонентом React, и я просто хочу передать его, включая стили, у которых есть! Important. И, к сожалению, они теряются.
@linkurzweg Спасибо за создание скрипки. Итак, причина, по которой стили не отображаются правильно, заключается в том, что встроенным стилям не требуется !important
.
После удаления !important
я сделал красную рамку. См. Обновленную скрипку .
@remarkablemark Конечно, глупый я! Могут быть некоторые другие теги стиля с! Important внутри строки html (все это очень беспорядочно), которые могут конфликтовать со встроенными стилями. Но я могу удалить! Important и там, так что все будет в порядке. : D Большое спасибо за то, что посмотрели на это и за вашу помощь!