javascript - 如何使用 ReactJS 在 javascript 中搜索段落中的多个关键字并用不同颜色突出显示每个关键字?
问题描述
我想从多组文本中搜索一个或多个关键字,并尝试用不同的颜色突出显示每个关键字。我正在使用 ReactJS redux。
我尝试使用正则表达式做同样的事情,但我得到了我想要的相同结果。当我只搜索一个关键字时,它工作正常。但是当我搜索多个关键字时,它会多次显示相同的关键字。
请帮助用不同的颜色突出显示不同的关键字。我无法实现它。
export default class SolrSearchComponent extends Component {
render(){
var allText = "Sea and Sky is your one-stop source for all things related. Sea and Sky is your one-stop source for all things related.";
var KeywordsTosearch = ["Sea", "sky"];
var parts = allText.split(new RegExp(`(${KeywordsTosearch.join("|")})`, "gi"));
var tempKeyword=[];
tempKeyword.push(
<span>
{ parts.map((part, i) =>
KeywordsTosearch.map((keyword,i) =>
<span key={i} style={ part.toLowerCase() === keyword.toLowerCase() ? { fontWeight: 'bold', color: 'red' } : {} }>
{ part }
</span>)
)
}
</span>
);
retrun(
<div>
{tempKeyword}
</div>
)
}
}
我期望结果中以不同颜色突出显示多个关键字,并且文本不应多次打印。
如果我正在搜索“Sea Sky”,它会在结果中显示以下内容:
Sea and Sky Sea and Sky 是您所有相关事物的一站式来源,是您所有相关事物的一站式来源。Sea and Sky Sea and Sky 是您所有相关事物的一站式来源,是您所有相关事物的一站式来源。
我想要这样的结果:
Sea and Sky 是您所有相关事物的一站式来源。Sea and Sky 是您所有相关事物的一站式来源。
注意:海应该是红色文本,天空应该是蓝色文本。
解决方案
您可以先定义一个对象来保存每个关键字的颜色,然后再使用它
const styles = {
"sea": {
fontWeight: "bold", color: "red"
},
"sky": {
fontWeight: "bold", color: "blue"
}
}
// use it
<span style={styles[keyword] || {}}>...</span>
零件和关键字搜索的下一个嵌套循环导致随机重复的文本
parts.map((part, i) => KeywordsTosearch.map((keyword,i) => { })
由于“KeywordsTosearch”已经完成了拆分句子的工作,您只需循环“parts”即可应用样式
var tempKeyword = [];
tempKeyword = parts.map((part, i) =>
<span
key={i}
style={this.getStyle(part)}>
{part}
</span>
)
推荐阅读
- c# - Autofac 多次注册组件
- python - 数组作为Python中的私有属性,但不是它的内容如何获取?
- android - Crashlytics 不显示本机崩溃
- c# - 来自选定行的 C# DataGrid 单元格值
- mysql - SQL-根据条件从不同的表中选择不同的字段
- android - 点击recyclerView后从firebase获取数据
- javascript - 如何将用户名文本添加到我的 Spark AR 过滤器?
- mysql - 如何将 EXCEL 转换为 SQL(我在 excel 中有 143864 行和 100 列)总计 48,316 KB
- excel - Excel VBA 无模式启动用户窗体,然后进入模态
- go - 大猩猩会话值存储在哪里?