react 搜索实现高亮

34 篇文章 2 订阅
19 篇文章 0 订阅

为了增加用户体验,都会提供一个快速搜索的功能,以便用户快速定位,但是如果进行模糊匹配的话,希望输入的关键字在搜出来的数据里面进行高亮展示,提高用户体验

技术点


1. font 标签

// 利用font标签可以规定文本字体、大小和颜色

<font color="red" size="5" face="arial" >测试</font>

2. dangerouslySetInnerHTML (直接在React中设置 HTML)

react 官网文档提供方法,是 React 为浏览器 DOM 提供 innerHTML 的替换方案。
通常来讲,使用代码直接设置 HTML 存在风险,因为很容易无意中使用户暴露于跨站脚本(XSS)的攻击。
因此,你可以直接在 React 中设置 HTML,但当你想设置 dangerouslySetInnerHTML 时,需要向其传递包含 key 为 __html 的对象,以此来警示你

// 例如
const Test = () => {
 return <div dangerouslySetInnerHTML={{__html: 'FIRST &middot;'}} /> 
}

实现核心代码

// 我们直接定义一个函数,替换关键字即可, 之后利用react的这个属性直接展示html字符串
    const textHightLight = (value: string, keyWord: string) => {
    	if (value.indexOf(keyWord) !== -1 && keyWord !== '') {
	  return value.replace(keyWord, `<font color="red">${keyWord}</font>`)
	}
        return value
    }

<span dangerouslySetInnerHTML={{__html: textHightLight(teststring, '测试')}} />

可以根据自己的需求进行方法调整

正则:用正则去做单行匹配,主要核心逻辑如下:

var reg =new RegExp(keyword,"g"); //定义正则  keyword是关键词

title = title.replace(reg, `<font color="red">${keyword}</font>`); //进行替换,并定义高亮的样式

交流
1、QQ群:可添加qq群共同进阶学习: 进军全栈工程师疑难解  群号:   856402057

2、公众号:公众号「进军全栈攻城狮」 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

                         

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在中实现搜索关键词高亮的方法可以参考以下步骤: 1. 首先,获取要替换的文字区域,可以使用`this.state.newsList`来获取已经获取到的新闻列表数据。 2. 使用`filter`函数对新闻列表数据进行过滤。在`filter`函数中,可以定义一个正则表达式,用来匹配关键词。 3. 对每个新闻的标题进行替换,可以使用`replace`方法。在替换的过程中,可以使用模板字符串来定义高亮样式,例如`<span class="keyword">${keyword}</span>`。 4. 最后,将替换后的新闻列表数据渲染到组件中。 下面是一个示例代码: ```javascript render() { const newsList = this.state.newsList; if (this.props.type === 'tag' || this.props.type === 'search') { let keyword = this.props.id; // 这里是父组件传过来的关键词 newsList.filter((value, index) => { // 使用filter函数过滤新闻列表数据 var re = new RegExp(keyword, "g"); // 定义正则 value.title = value.title.replace(re, `<span class="keyword">${keyword}</span>`); // 进行替换,并定义高亮的样式 }); } return ( <div> {newsList.map((value, index) => { return (<NewsListItem news={value} key={index} />) // 把新闻传递给新闻列表的单个新闻组件 })} <div className="btn-more transition" onClick={this.fetchMoreList}>{this.state.loadingText}</div> </div> ); } ``` 在上述代码中,使用了`replace`方法进行关键词的替换,并将替换后的新闻列表数据渲染到组件中。可以根据需要自定义高亮样式,例如设置关键词的颜色为蓝色。 另外,如果需要在其他地方使用高亮方法,可以参考以下代码: ```javascript const highLight = (str, word) => { let result = str.replace(new RegExp(`(${word})`, 'ig'), '<span style="color:#12B8D7">$1</span>'); return result; }; ``` 在上述代码中,使用了`replace`方法对字符串进行替换,并定义了高亮的样式。可以将需要高亮的字符串作为参数传入该方法,然后得到替换后的字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [react实现搜索结果中关键词高亮显示](https://blog.csdn.net/weixin_34055787/article/details/86263187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [react搜索结果显示高亮(自定义颜色)](https://blog.csdn.net/m0_55536307/article/details/128634644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值