Skip to content

搜索功能修复说明

问题描述

原项目使用了 vitepress-plugin-search 插件,该插件存在 HTML 结构问题:

<div> cannot be child of <p>, according to HTML specifications

这个警告出现在 node_modules/vitepress-plugin-search/dist/Search.vue 文件的第230行,违反了 HTML 规范。

解决方案

我们创建了一个自定义的搜索组件来替换有问题的第三方插件:

1. 创建自定义搜索组件

  • 文件位置: .vitepress/theme/components/CustomSearch.vue
  • 功能特性:
    • 符合 HTML 规范的语义化结构
    • 支持中文和英文搜索
    • 实时搜索和高亮显示
    • 键盘导航支持(上下箭头、回车、ESC)
    • 响应式设计

2. 创建搜索工具

  • 文件位置: .vitepress/theme/utils/search.js
  • 功能特性:
    • 文档索引和搜索
    • 中文分词支持
    • 搜索结果排序和评分
    • 预览文本生成和高亮

3. 更新主题配置

  • 文件位置: .vitepress/theme/index.js
  • 修改内容: 集成自定义搜索组件到导航栏

4. 移除有问题的插件

  • 文件位置: .vitepress/config.mjspackage.json
  • 修改内容: 移除 vitepress-plugin-search 插件配置和依赖

新搜索功能特性

搜索功能

  • ✅ 支持中文和英文搜索
  • ✅ 实时搜索结果
  • ✅ 搜索结果高亮显示
  • ✅ 键盘快捷键支持(Ctrl+K)
  • ✅ 搜索结果导航(上下箭头键)

用户体验

  • ✅ 响应式设计
  • ✅ 暗色/亮色主题适配
  • ✅ 搜索结果预览
  • ✅ 无结果提示

技术特性

  • ✅ 符合 HTML 规范
  • ✅ 无控制台警告
  • ✅ 性能优化
  • ✅ 可扩展架构

使用方法

  1. 打开搜索: 点击导航栏的搜索按钮或按 Ctrl+K
  2. 输入关键词: 支持中文和英文搜索
  3. 浏览结果: 使用鼠标或键盘导航
  4. 选择结果: 点击或按回车键跳转到对应页面

文件结构

.vitepress/
├── theme/
│   ├── components/
│   │   └── CustomSearch.vue      # 自定义搜索组件
│   ├── utils/
│   │   └── search.js            # 搜索工具类
│   ├── index.js                 # 主题配置(已更新)
│   └── style.css
└── config.mjs                   # VitePress配置(已更新)

维护说明

添加新的搜索内容

.vitepress/theme/utils/search.js 文件的 initializeSearch() 函数中添加新的文档:

javascript
searchIndex.addDocument(
  'document-id',
  '文档标题',
  '文档内容描述',
  '/guide/document-path'
)

自定义搜索样式

.vitepress/theme/components/CustomSearch.vue 文件的 <style> 部分修改样式。

扩展搜索功能

可以在 SearchIndex 类中添加更多搜索算法和功能。

优势

  1. 无警告: 完全符合 HTML 规范,无控制台警告
  2. 可维护: 代码结构清晰,易于维护和扩展
  3. 性能好: 轻量级实现,快速响应
  4. 用户体验: 现代化的搜索界面和交互
  5. 可定制: 完全可定制的搜索逻辑和样式

兼容性

  • ✅ VitePress 1.x
  • ✅ Vue 3
  • ✅ 现代浏览器
  • ✅ 移动设备

由石家庄舒君科技有限公司开发