Vue3实现表格搜索内容高亮

server/2025/1/19 4:19:03/

采用html拼接

v-html 指令用来将给定的 HTML 字符串直接渲染到页面上

javascript"><template><div><!-- 搜索框 --><input v-model="searchText" placeholder="搜索内容" /><!-- 表格 --><el-table :data="tableData" style="width: 100%" @row-click="handleRowClick"><el-table-column label="Content" prop="content"><template #default="{ row }"><!-- 使用 v-html 渲染含有高亮部分的 HTML --><span v-html="getHighlightedContent(row.content)"></span></template></el-table-column></el-table></div>
</template><script lang="ts" setup>import { ref } from 'vue';// 响应式数据const searchText = ref('');const tableData = ref([{ id: 1, content: '创建人:李四<br>创建时间:2025-01-11 10:24:00<br>' },{ id: 2, content: '创建人:张三<br>创建时间:2025-01-12 11:25:00<br>' },]);// 根据搜索文本匹配并返回高亮内容function getHighlightedContent(content: string) {if (!searchText.value) {return content; // 如果没有输入搜索文本,直接返回原内容}const regex = new RegExp(`(${escapeRegExp(searchText.value)})`, 'gi');let highlightedContent = content.replace(regex, '<span style="color: rgb(109,172,246); font-weight: bold;">\$1</span>');return highlightedContent;}// 用来转义搜索文本中的特殊字符,避免正则错误function escapeRegExp(string: string) {return string.replace(/[.*+?^=!:${}()|\[\]\/\\]/g, '\\$&');}
</script><style scoped>/* 你可以根据需要添加其他样式 */
</style>
(1)getHighlightedContent 函数
javascript">function getHighlightedContent(content: string) {if (!searchText.value) {return content; // 如果没有输入搜索文本,直接返回原内容}const regex = new RegExp(`(${escapeRegExp(searchText.value)})`, 'gi');let highlightedContent = content.replace(regex, '<span style="color: rgb(109,172,246); font-weight: bold;">\\$1</span>');return highlightedContent;
}
  • 这个函数接收一个字符串 content,并根据 searchText 中的文本进行高亮显示。
  • 步骤
    • 如果 searchText 为空,直接返回原内容。
    • 创建一个正则表达式,用于匹配 searchText 中的所有文本(不区分大小写)。
    • 使用 content.replace() 方法,找到所有匹配的文本并用 <span> 标签包裹,同时设置样式(字体加粗,颜色改变)。
    • 返回高亮后的 HTML 字符串。
(2)escapeRegExp 函数
javascript">function getHighlightedContent(content: string) {if (!searchText.value) {return content; // 如果没有输入搜索文本,直接返回原内容}const regex = new RegExp(`(${escapeRegExp(searchText.value)})`, 'gi');let highlightedContent = content.replace(regex, '<span style="color: rgb(109,172,246); font-weight: bold;">\\$1</span>');return highlightedContent;
}
  • 这个函数用于转义 searchText 中的特殊字符,避免它们在构建正则表达式时引起错误。
  • 正则表达式中的一些字符(如 .*? 等)具有特殊含义,因此需要通过 escapeRegExp 函数将它们转义,以确保它们能被正确地作为普通字符匹配。

http://www.ppmy.cn/server/159535.html

相关文章

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器&#xff08;软件I2C&#xff09;1、模块内部电路2、寄存器地…

【深度学习】Pytorch:自实现残差网络

ResNet&#xff08;残差网络&#xff09;是由何凯明等人在2015年发表的论文《深度残差学习用于图像识别》中提出的一种开创性深度学习架构。它在ILSVRC 2015分类任务中获胜&#xff0c;并解决了深度神经网络中的退化问题&#xff0c;使得训练数百甚至数千层的网络成为可能。 残…

镭速大文件传输视频文件预览实现原理

镭速可以支持视频预览&#xff0c;在测试过程中需要大量不同格式的视频&#xff0c;如果直接去找各种格式的视频不太现实&#xff0c;所以就会用到一个视频格式转换的工具ffmpeg&#xff0c;本文将介绍ffmpeg的基本使用方法。FFmpeg 是一个免费开源的音视频处理工具&#xff0c…

Docker部署Spring Boot + Vue项目

目录 前提条件 概述 下载代码 打开代码 Docker创建网络 MySQL容器准备 MySQL数据库配置 启动MySQL容器 测试连接MySQL 初始化MySQL数据 Redis容器准备 修改Redis配置 启动redis容器 部署后端 后端代码打包 上传jar包到Linux 创建Dockerfile 构建镜像 运行后…

进阶——十六届蓝桥杯嵌入式熟练度练习(按键+LCD)

高亮&#xff08;一&#xff09; 声明 char buf[21];unsigned char upled0x04;uint8_t key_val;uint8_t key_down,key_up,key_old;uint32_t key_time;uint8_t key_temp,key_flag;uint8_t line_flag; 按键代码 void key_proc(void) { key_valkey_scan();key_downkey_val&…

1.5 GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新

GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新 随着人工智能技术的飞速发展,GPT(Generative Pre-trained Transformer)模型家族已经成为了现代自然语言处理(NLP)领域的标杆。从初代的 GPT-1 到最新的 GPT-4,每一代模型的发布都标志着人工智能技术的一个飞跃,并推…

若依入门使用

若依使用 1.下载2.搭建环境2.1 若依框架的目录结构2.2 打开项目修改配置文件2.2.1 打开后端项目2.2.2 设置 Maven2.2.3 application-druid.yml文件2.2.4 application.yml文件 2.3 运行后台服务2.4 运行前台服务2.4.1 编译器打开前台项目2.4.2 项目初始化2.4.3 启动 3.使用3.1 菜…

1.15寒假作业

web&#xff1a;nss靶场ez_ez_php 打开环境&#xff0c;理解代码 使用个体传参的方法&#xff0c;首先代码会检查file参数的前三个字符是不是php&#xff0c;如果是就输出nice&#xff0c;然后用include函数包含file&#xff0c;绕过不是则输出hacker&#xff0c;如果没有file…