我试图在返回一张Map后添加一个类,基本上我试图在翻译每个单词后突出显示文本,我这样做是通过添加一个css类。我可以添加类,但只是添加到整个框中,而不是我更改的词,我尝试了许多方法,但我猜我不太理解函数,我尝试了matchall,也尝试了将它们替换为以前的方法,并尝试直接设置样式,但我仍然无法实现,我还尝试在“return”之后添加函数,但是javascript在调用return时结束函数的执行/
谢谢你的时间!
export default function Text() {
var inputText;
var mapObj = { blue: "azul", green: "verde", yellow: "amarillo" };
function changeText() {
inputText = document.querySelector("#inputF");
document.getElementById("outputF").innerHTML = inputText.value.replaceAll(/\b(blue|green|yellow)\b(|,.$)/gi,
function(matched){
return mapObj[matched];
})
outputF.classList.add("mark");
}
return (
<div>
<textarea id="inputF"></textarea>
<button onClick={changeText}>Change</button>
<textarea id="outputF"></textarea>
</div>
);
};
///CSS
.mark{
background-color:blue;}
2条答案
按热度按时间gev0vcfq1#
我建议在这里使用more react而不是本机js,特别是对于该组件的状态管理,我可能有点过火,但我将您的组件更新为以下内容:
小提琴:https://jsfiddle.net/3tc2xzms/
首先,我加了2
useState
钩子来管理输入和输出文本。然后对于突出显示部分,每个被更改的匹配单词都被 Package 在一个span.mark
. 输出文本区域也被更改为div。相关文件:
形式:https://reactjs.org/docs/forms.html
州钩:https://reactjs.org/docs/hooks-state.html
将字符串设置为html:https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
bmvo0sr52#
应用的样式将更改整个场景的背景色
textarea
,你可以做的是使用setSelectionRange()
textarea的方法,这将使您得到接近预期的结果。要更改突出显示颜色,可以使用以下css: