最近写移动端项目的时候,遇到搜索关键词高亮的需求,写篇文章纪录一下
先看效果:
以上为实现效果展示;
整体思路 : 对后台返回的数据进行操作,(我这里是模拟数据),使用正则去匹配搜索关键词后,使用replace进行字符串的替换; 渲染数据部分使用v-html进行动态展示即可实现.
以下是代码:
html代码:
<template>
<div class="box">
<!-- 搜索框 -->
<div class="mySearch">
<van-search
v-model="PopUpSarCh"
show-action
placeholder="请输入搜索关键词"
@search="onSearch"
class="onSearch"
>
<template #action>
<div @click="onSearch">搜索</div>
</template>
</van-search>
</div>
<!-- 搜索结果 -->
<div class="SearchResults">
<div class="SearchContent" v-for="(item, index) in list" :key="index">
<h5 v-html="item.title"></h5>
<div class="myContent" v-html="item.name"></div>
<div class="dotted"></div>
</div>
</div>
</div>
</template>
js代码:
export default {
data() {
return {
list: [],
PopUpSarCh: "",
};
},
methods: {
// 搜索框方法
onSearch() {
//每次搜索前清空
this.list = [];
var arr = [
{
title: "直装直提办理业务",
name: "进口水果'船边直提'大铲湾码头水果通过效率第一,进口水果船边直提",
},
{
title: "直装直提办理业务",
name: "进口水果'船边直提'大铲湾码头水果通过效率第一,进口水果船边直提",
},
{
title: "直装直提办理业务",
name: "进口水果'船边直提'大铲湾码头水果通过效率第一,进口水果船边直提",
},
{
title: "直装直提办理业务",
name: "进口水果'船边直提'大铲湾码头水果通过效率第一,进口水果船边直提",
},
];
this.list = arr;
this.changeColor(this.list);//调用搜索词方法
},
// 搜索关键词高亮方法
changeColor(result) {
//result为接口返回的数据
result.map((item, index) => {
if (this.PopUpSarCh) {
/**
* 使用正则表达式进行全文匹配关键词
* ig : 表示 全文查找 ,忽略大小写
* i : 忽略大小写
* g : 全文查找
*
* 使用字符串的replace方法进行替换
* stringObject.replace('被替换的值',替换的值)
title和name是你要高亮的字段
*/
let replaceReg = new RegExp(this.PopUpSarCh, "ig");
let replaceString = `<span style="color: #ed4014">${this.PopUpSarCh}</span>`;
result[index].title = item.title.replace(replaceReg, replaceString);
result[index].name = item.name.replace(replaceReg, replaceString);
}
});
this.records = result;
},
},
};
本文转载自: https://blog.csdn.net/m0_59023970/article/details/129564219
版权归原作者 前端小脑虎 所有, 如有侵权,请联系我们删除。
版权归原作者 前端小脑虎 所有, 如有侵权,请联系我们删除。