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

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

相关推荐
寅时码12 分钟前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
不好听61316 分钟前
HTML 事件监听机制:从 DOM Level 0 到 React 合成事件
前端·react.js·html
wordbaby24 分钟前
为什么刷新页面就 404?聊聊 SPA 路由与 Nginx 的那点事
前端
咖啡八杯40 分钟前
GoF设计模式——解释器模式
java·后端·spring·设计模式
不好听61343 分钟前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹44 分钟前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听6131 小时前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue1 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue1 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g