当前位置:首页 > JavaScript

js实现全局搜索

2026-03-16 01:30:27JavaScript

实现全局搜索的方法

在JavaScript中实现全局搜索功能,可以通过以下几种方式来完成。以下方法适用于前端实现,可以根据需求选择合适的方式。

使用DOM遍历实现搜索

通过遍历DOM元素,匹配关键词并高亮显示结果。这种方法适用于静态页面或简单的动态内容。

js实现全局搜索

function globalSearch(keyword) {
  const elements = document.querySelectorAll('body *');
  elements.forEach(element => {
    if (element.childNodes.length > 0) {
      element.childNodes.forEach(child => {
        if (child.nodeType === Node.TEXT_NODE && child.textContent.includes(keyword)) {
          const span = document.createElement('span');
          span.style.backgroundColor = 'yellow';
          span.textContent = child.textContent;
          child.replaceWith(span);
        }
      });
    }
  });
}

使用事件监听实现动态搜索

通过监听输入框的变化,实时触发搜索逻辑。这种方法适用于需要动态响应的场景。

const searchInput = document.getElementById('search-input');
searchInput.addEventListener('input', (e) => {
  const keyword = e.target.value.trim();
  if (keyword) {
    globalSearch(keyword);
  } else {
    clearHighlights();
  }
});

function clearHighlights() {
  const highlights = document.querySelectorAll('span[style="background-color: yellow;"]');
  highlights.forEach(highlight => {
    highlight.replaceWith(highlight.textContent);
  });
}

使用正则表达式增强搜索

通过正则表达式实现更灵活的匹配,例如不区分大小写或部分匹配。

js实现全局搜索

function globalSearchWithRegex(keyword) {
  const regex = new RegExp(keyword, 'gi');
  const elements = document.querySelectorAll('body *');
  elements.forEach(element => {
    if (element.childNodes.length > 0) {
      element.childNodes.forEach(child => {
        if (child.nodeType === Node.TEXT_NODE && regex.test(child.textContent)) {
          const span = document.createElement('span');
          span.style.backgroundColor = 'yellow';
          span.textContent = child.textContent.replace(regex, match => `<mark>${match}</mark>`);
          child.replaceWith(span);
        }
      });
    }
  });
}

结合后端API实现全局搜索

如果数据量较大或需要跨页面搜索,可以调用后端API获取搜索结果并动态渲染。

async function searchWithAPI(keyword) {
  const response = await fetch(`/api/search?q=${keyword}`);
  const results = await response.json();
  renderResults(results);
}

function renderResults(results) {
  const resultsContainer = document.getElementById('results');
  resultsContainer.innerHTML = '';
  results.forEach(result => {
    const div = document.createElement('div');
    div.textContent = result.title;
    resultsContainer.appendChild(div);
  });
}

使用第三方库实现高级搜索

对于复杂的搜索需求,可以使用第三方库如Lunr.js或Fuse.js,它们提供了全文搜索、模糊匹配等功能。

const fuse = new Fuse(data, {
  keys: ['title', 'content'],
  threshold: 0.4
});

function searchWithFuse(keyword) {
  const results = fuse.search(keyword);
  renderResults(results);
}

注意事项

  • 对于大型应用,建议使用虚拟滚动或分页加载搜索结果,避免性能问题。
  • 如果搜索内容涉及敏感数据,确保在后端处理搜索逻辑,避免前端暴露数据。
  • 高亮显示搜索结果时,注意不要破坏原有的DOM结构或事件绑定。

标签: 全局js
分享给朋友:

相关文章

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

vue  全局刷新实现

vue 全局刷新实现

Vue 全局刷新实现方法 在Vue应用中实现全局刷新通常涉及重新加载整个页面或重置应用状态。以下是几种常见方法: 使用 window.location.reload() 直接调用浏览器原生的刷新方法…

js实现吸色

js实现吸色

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

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…