#javascript #html #reactjs
Вопрос:
У меня есть веб-приложение, в котором мой интерфейс (React, JavaScript) получает очищенные HTML-строки, которые могут содержать <span>
элементы.
Пример:
'testing <span id="1">hello world</span> 2222222'
Я могу отобразить это без проблем с помощью dangerouslySetInnerHTML
.
Однако в моем интерфейсе я хочу обернуть эти <span>
s в другой компонент. Например:
testing <NicerSpan><span id="1">hello world</span></NicerSpan> 2222222
.
Я могу сделать это с помощью регулярного выражения: создайте регулярное выражение, соответствующее <span>...</span>
s, разделите html-строку с помощью регулярного выражения, а затем повторите все совпадения и оберните его в нужный компонент:
<div>
{replaceSpans(myHtmlString, (match) => (
<NicerSpan>{match}</NicerSpan>
))}
</div>
const replaceSpans = (span, matchFn) => {
const split = span.split(spanRegex);
// apply fn to all matches (located at odd-indexes)
for (let i = 1; i < split.length; i = 2) {
split[i] = matchFn(split[i]);
}
return split;
};
Регулярное выражение, которое я использую, таково /(<span[^>]*>[sS] </span>)/g
.
Я создал кодовую строку, которая демонстрирует вышеописанную работу: https://codepen.io/dero0/pen/ZEKoYGQ.
Вы можете видеть, что предоставленная <span>
в HTML-строке строка теперь обернута в другой компонент со стилем (фактический компонент в моем приложении выполняет множество других функций, это всего лишь пример). Короче говоря, я хочу завернуть <span>
букву s в HTML-строку с помощью другого компонента.
Однако я чувствую, что это не очень надежное или эффективное решение. Есть ли лучшее решение для этого? В идеале без использования jQuery.
Спасибо!