【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 很大,频繁更新可能影响性能,可以考虑防抖

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

相关推荐
文丑颜不良啊13 分钟前
LeetCode201~225题目解析
java·leetcode
智能直播28 分钟前
RK3518:1.5G 内存 + 8G 存储,如何跑起硬件编解码、Web、AI 识别、绿幕特效
前端·人工智能·5g
Elastic 中国社区官方博客1 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌1 小时前
进程控制管理
linux·运维·服务器
掘金酱2 小时前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端
SL_staff2 小时前
4G设备掉线三层归因指南:SIM卡、模组、JVS-IOT网关配置精准锁定
java·物联网·产品
excel2 小时前
多进程环境下使用 PM2 部署 Socket.IO:需要注意什么
前端
IT_陈寒2 小时前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
2401_868534783 小时前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
Wang's Blog3 小时前
Java 项目实战: 交友项目 - 黑名单:取消黑名单
java·windows·交友