当前位置:首页 > JavaScript

js实现高亮

2026-01-31 13:59:49JavaScript

实现文本高亮的几种方法

使用HTML和CSS结合JavaScript

通过JavaScript动态添加HTML标签和CSS类来实现高亮效果。以下是一个基本示例:

function highlightText(text, searchTerm) {
  const regex = new RegExp(searchTerm, 'gi');
  return text.replace(regex, match => `<span class="highlight">${match}</span>`);
}

// 使用示例
const originalText = "这是一个测试文本,测试高亮功能";
const highlightedText = highlightText(originalText, "测试");
document.body.innerHTML = highlightedText;

对应的CSS样式:

.highlight {
  background-color: yellow;
  color: black;
}

使用Range和Selection API

这种方法适合对DOM中的特定部分进行高亮,而不需要替换整个HTML内容:

js实现高亮

function highlightSelection() {
  const selection = window.getSelection();
  if (selection.rangeCount > 0) {
    const range = selection.getRangeAt(0);
    const span = document.createElement('span');
    span.className = 'highlight';
    range.surroundContents(span);
  }
}

使用第三方库

Mark.js是一个专门用于文本高亮的轻量级库:

// 引入Mark.js后
const instance = new Mark(document.querySelector("body"));
instance.mark("需要高亮的词", {
  className: 'highlight',
  separateWordSearch: false
});

动态高亮搜索关键词

实现实时搜索高亮功能:

js实现高亮

const searchInput = document.getElementById('search');
searchInput.addEventListener('input', (e) => {
  const searchTerm = e.target.value;
  const textNodes = document.querySelectorAll('.content');

  textNodes.forEach(node => {
    const text = node.textContent;
    const highlighted = highlightText(text, searchTerm);
    node.innerHTML = highlighted;
  });
});

高亮性能优化

对于大量文本的高亮操作,考虑以下优化:

function highlightOptimized(text, words) {
  const uniqueWords = [...new Set(words)];
  const regex = new RegExp(uniqueWords.join('|'), 'gi');

  return text.replace(regex, match => {
    const color = getColorForWord(match);
    return `<span style="background-color: ${color}">${match}</span>`;
  });
}

清除高亮

在应用新高亮前清除旧高亮:

function removeHighlights() {
  const highlights = document.querySelectorAll('.highlight');
  highlights.forEach(hl => {
    const parent = hl.parentNode;
    parent.replaceChild(document.createTextNode(hl.textContent), hl);
    parent.normalize();
  });
}

以上方法可以根据具体需求选择使用,简单的文本替换适合大多数场景,而Range API更适合精确控制高亮位置。第三方库则提供了更多开箱即用的功能。

标签: js高亮
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 和字符串替换 通过字符串替换将匹配的关键词包裹在 <spa…