当前位置: 首页 > news >正文

js高亮文本

高亮文本

const inputs = ["这是一个普通文本,包含关键字测试。",'<p style="font-size: 10px">这是一个<span>GVM</span> <strong>测试</strong>内容。</p>',
];const keywords = ["测试", "GVM"];
function highlightKeyword(inputContent, keyword) {if (!keyword) return inputContent; // 如果没有关键字,直接返回原始内容// 转义用户输入的关键字,避免正则表达式特殊字符冲突const escapeRegExp = (str) =>str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");// 创建匹配关键字的正则表达式const keywordRegex = new RegExp(`(${escapeRegExp(keyword)})`, "gi");// 判断是否为普通文本(没有 HTML 标签)const isPlainText = !/<[^>]+>/.test(inputContent);if (isPlainText) {// 普通文本处理return inputContent.replace(keywordRegex,'<span class="highlight">$1</span>');}// HTML 内容处理const parser = new DOMParser();const doc = parser.parseFromString(inputContent, "text/html");// 遍历节点,处理文本高亮function traverseNodes(node) {if (node.nodeType === Node.TEXT_NODE) {// 替换关键字为高亮的内容const parent = node.parentNode;const highlightedHTML = node.textContent.replace(keywordRegex,'<span class="highlight">$1</span>');// 用安全的 HTML 替换if (highlightedHTML !== node.textContent) {const temp = document.createElement("div");temp.innerHTML = highlightedHTML;while (temp.firstChild) {parent.insertBefore(temp.firstChild, node);}parent.removeChild(node);}} else if (node.nodeType === Node.ELEMENT_NODE) {// 递归处理子节点Array.from(node.childNodes).forEach(traverseNodes);}}traverseNodes(doc.body);// 返回处理后的 HTMLreturn doc.body.innerHTML;
}
http://www.lryc.cn/news/521943.html

相关文章:

  • 解决SpringBoot 健康检测接口 actuator/health 访问一直卡着,但 actuator/info等其他接口能正常访问的问题
  • KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访
  • GaussDB中的Vacuum和Analyze
  • IvorySQL 4.2 发布
  • 浅谈云计算20 | OpenStack管理模块(下)
  • 去年社融增量超32万亿 货币信贷平稳增长-乐享数科
  • STM32 HAL库函数入门指南:从原理到实践
  • React封装倒计时按钮
  • 深入探究Linux树状目录结构
  • Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)
  • linux安装nvm
  • 图论1-问题 C: 算法7-6:图的遍历——广度优先搜索
  • 基于 STM32 的多功能时间管理器项目
  • Java工程结构:二方库依赖规约
  • Django自带admin管理系统使用
  • Jmeter 简单使用、生成测试报告(一)
  • 手摸手实战前端项目CI CD
  • 【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
  • K8S中的Pod调度之亲和性调度
  • 高等数学学习笔记 ☞ 不定积分的积分法
  • 【HTTP】详解
  • cursor重构谷粒商城01——为何要重构谷粒商城
  • 如何在 ASP.NET Core 中实现速率限制?
  • STM32-笔记43-低功耗
  • Facebook 隐私风波:互联网时代数据安全警钟
  • Java 中的 ZoneOffset
  • amis模板语法、数据映射与表达式
  • 频域增强通道注意力机制EFCAM模型详解及代码复现
  • GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
  • BPG图像库和实用程序(译)