[英]React.js: contentEditable div not rendering nested span elements
I have a contentEditable div where I am trying to update the colors of words that the user types into it onChange.我有一个 contentEditable div,我试图在其中更新用户在 onChange 中输入的单词的 colors。 When I detect a word that I want to be colored, I wrap it in a
<span>
element.当我检测到一个想要着色的单词时,我将它包装在一个
<span>
元素中。
The issue is, the <span>
elements aren't being properly rendered, and the raw HTML of the span elements are being displayed like this:问题是,
<span>
元素没有被正确渲染,并且 span 元素的原始 HTML 显示如下:
bla bla bla <span class="text-primary">keyword with color</span> bla bla bla
. bla bla bla <span class="text-primary">keyword with color</span> bla bla bla
.
How do I fix this?我该如何解决? Is this something to do with React?
这与 React 有关吗?
This is the code I'm using to generate the text that goes inside the contentEditable div.这是我用来生成 contentEditable div 内的文本的代码。 I store the result in a variable in
render()
and directly pass it into the contentEditable div with {text}
.我将结果存储在
render()
中的变量中,并使用{text}
直接将其传递到 contentEditable div。
function formatDateKeywords(name, keyword) {
var startIndex = name.indexOf(keyword);
var endIndex = startIndex + keyword.length;
var res =
name.substring(0, startIndex) +
"<span class='text-primary'>" +
keyword +
"</span>" +
name.substring(endIndex, name.length);
return res;
}
This is what the div looks like:这是 div 的样子:
<div
contentEditable="true"
suppressContentEditableWarning={true}
id="addItemInput"
data-placeholder={placeholder}
className="form-control text-left editable"
type="text"
onInput={(e) => this.handleInput(e)}
onKeyDown={(e) => this.keyPress(e)}
>
{formattedText}
</div>
in reactjs you have to use JSX to add tag into content: i use React.Fragment to avoid adding unused tag.在 reactjs 中,您必须使用 JSX 将标签添加到内容中:我使用 React.Fragment 来避免添加未使用的标签。
function formatDateKeywords(name, keyword) {
var startIndex = name.indexOf(keyword);
var endIndex = startIndex + keyword.length;
var res = <>
{name.substring(0, startIndex)}
<span class='text-primary'>{keyword}</span>
{name.substring(endIndex, name.length)}
</>;
return res;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.