【uniapp】vue2 搜索文字高亮显示

【uniapp】vue2 搜索文字高亮显示

我这里是把方法放在公共组件中使用

javascript 复制代码
props: {
    // 帖子list
    postList: {
		type: Array,
		required: true
    },
    // 搜索文本字体高亮
    highLightSearch: {
		type: String,
		required: false
    }
},
watch: {
    // 监听 props 的变化
     postList: {
       immediate: true,
         handler(newVal) {
					// 变化后的新值, 当前的高亮搜索词
            this.updateHighlightedPostList(newVal, this.highLightSearch);
         },
      },
},
methods: {
   updateHighlightedPostList(postList, searchKeyword) {
       // 检查是否有搜索关键字
	   if (!searchKeyword) {
		this.highlightedPostList = [...postList]
		return
       }
       // 创建正则表达式匹配关键字(g 全局匹配,i 不区分大小写)
       const regex = new RegExp(`(${searchKeyword})`, "gi");
       // 更新高亮内容
       this.highlightedPostList = postList.map((item) => ({
          ...item,
          title: item.title.replace(
             regex,
             `<text class="hight_blue">$1</text>` // 将匹配到的内容 ($1) 包裹在 <text> 标签中
          ),
       }));
   },
}
html 复制代码
<view v-for="p in highlightedPostList" :key="p.id">
    <!-- 页面文字展示一定要用 v-html 便于解析标签样式 -->
    <view v-html="p.title" class=""></view>
</view>

高亮实现方式是用 HTML 标签包裹匹配文本,通过 CSS 控制样式

注意事项:

使用 v-html 显示 title 时要小心 XSS 攻击,确保 searchKeyword 是可信的

如果 postList 很大,频繁更新可能影响性能,可以考虑防抖

正则表达式中的特殊字符可能需要转义

相关推荐
장숙혜5 分钟前
ElementUi的Dropdown下拉菜单的详细介绍及使用
前端·javascript·vue.js
.生产的驴7 分钟前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
火柴盒zhang8 分钟前
websheet之 编辑器
开发语言·前端·javascript·编辑器·spreadsheet·websheet
子非衣8 分钟前
Windows云主机远程连接提示“出现了内部错误”
服务器·windows
某公司摸鱼前端11 分钟前
uniapp 仿企微左边公司切换页
前端·uni-app·企业微信
WKK_13 分钟前
uniapp自定义封装tabbar
前端·javascript·小程序·uni-app
莫问alicia14 分钟前
react 常用钩子 hooks 总结
前端·javascript·react.js
猿周LV14 分钟前
JMeter 安装及使用 [软件测试工具]
java·测试工具·jmeter·单元测试·压力测试
晨集16 分钟前
Uni-App 多端电子合同开源项目介绍
java·spring boot·uni-app·电子合同
时间之城18 分钟前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel