当前位置:首页 > JavaScript

静态网页用js实现搜索功能

2026-04-04 12:32:25JavaScript

实现静态网页搜索功能的方法

静态网页可以通过JavaScript实现客户端搜索功能,无需后端支持。以下是几种常见实现方式:

基础文本搜索实现

创建搜索输入框和结果容器:

<input type="text" id="searchInput" placeholder="搜索...">
<div id="searchResults"></div>

添加JavaScript搜索逻辑:

const searchInput = document.getElementById('searchInput');
const searchResults = document.getElementById('searchResults');
const contentToSearch = document.querySelectorAll('.searchable-content');

searchInput.addEventListener('input', function() {
    const searchTerm = this.value.toLowerCase();
    searchResults.innerHTML = '';

    if (searchTerm.length < 2) return;

    contentToSearch.forEach(item => {
        const text = item.textContent.toLowerCase();
        if (text.includes(searchTerm)) {
            const resultItem = document.createElement('div');
            resultItem.innerHTML = item.innerHTML;
            searchResults.appendChild(resultItem);
        }
    });
});

使用Lunr.js实现高级搜索

安装Lunr.js:

<script src="https://unpkg.com/lunr/lunr.js"></script>

初始化搜索索引:

let idx = lunr(function() {
    this.ref('id');
    this.field('title');
    this.field('content');

    documents.forEach(doc => {
        this.add(doc);
    });
});

执行搜索:

静态网页用js实现搜索功能

function search() {
    const query = document.getElementById('searchInput').value;
    const results = idx.search(query);
    displayResults(results);
}

实现关键词高亮显示

在搜索结果中高亮匹配文本:

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

添加CSS样式:

.highlight {
    background-color: yellow;
    font-weight: bold;
}

优化搜索性能

对于大量内容,考虑以下优化:

  • 实现防抖机制减少频繁搜索

    静态网页用js实现搜索功能

    let debounceTimer;
    searchInput.addEventListener('input', function() {
      clearTimeout(debounceTimer);
      debounceTimer = setTimeout(() => {
          performSearch(this.value);
      }, 300);
    });
  • 预加载搜索索引

  • 实现分页显示结果

完整示例代码

HTML结构:

<div class="search-container">
    <input type="text" id="searchInput" placeholder="输入关键词...">
    <button id="searchButton">搜索</button>
</div>
<div id="searchResults"></div>

JavaScript实现:

document.addEventListener('DOMContentLoaded', function() {
    const searchData = [
        {id: 1, title: "文章1", content: "这是第一篇文章的内容"},
        {id: 2, title: "文章2", content: "这是关于JavaScript的教程"}
    ];

    const idx = lunr(function() {
        this.ref('id');
        this.field('title');
        this.field('content');
        searchData.forEach(doc => this.add(doc));
    });

    document.getElementById('searchButton').addEventListener('click', function() {
        const query = document.getElementById('searchInput').value;
        const results = idx.search(query);

        let html = '';
        results.forEach(result => {
            const item = searchData.find(d => d.id == result.ref);
            html += `<div class="result-item">
                <h3>${item.title}</h3>
                <p>${item.content}</p>
            </div>`;
        });

        document.getElementById('searchResults').innerHTML = html || '无结果';
    });
});

这些方法可以根据具体需求进行组合和调整,适用于大多数静态网站的搜索功能实现。

分享给朋友:

相关文章

vue实现静态化

vue实现静态化

Vue 实现静态化的方法 Vue 应用可以通过多种方式实现静态化,生成纯 HTML、CSS 和 JavaScript 文件,便于部署到静态服务器或 CDN。以下是几种常见的方法: 使用 Vue CL…

vue实现商品搜索功能

vue实现商品搜索功能

Vue 实现商品搜索功能 数据准备与绑定 在 Vue 组件中定义商品数据列表和搜索关键词。商品数据可以存储在 data 属性中,搜索关键词通过 v-model 双向绑定到输入框。 <templ…

vue实现input搜索功能

vue实现input搜索功能

实现基础搜索功能 在Vue中实现input搜索功能可以通过v-model绑定输入值,结合计算属性或方法过滤数据。以下是一个基础实现示例: <template> <div>…

如何加载react静态页面

如何加载react静态页面

加载React静态页面的方法 使用React脚手架工具创建项目 通过Create React App(CRA)快速生成React项目结构,内置静态资源处理能力。执行以下命令初始化项目: npx…

静态css网页制作

静态css网页制作

静态CSS网页制作方法 使用HTML和CSS创建静态网页是前端开发的基础。以下步骤展示如何构建一个简单的静态网页。 HTML结构搭建 创建基本HTML文件结构,包含<!DOCTYPE html…

smarty实现php静态化

smarty实现php静态化

Smarty 实现 PHP 静态化方法 使用 Smarty 的 fetch 方法生成静态文件 通过 Smarty 的 fetch 方法获取模板渲染后的内容,再将其写入静态文件。 $smarty =…