当前位置:首页 > 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实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…