菜单

搜索组件

相关源文件

Semantic UI 的搜索组件为在 Web 应用程序中实现搜索功能提供了全面的解决方案。本文档涵盖了搜索组件的结构、行为和自定义选项,包括本地和远程搜索功能。

概述

搜索组件允许用户搜索数据集合并显示匹配的结果。它支持本地数据过滤和基于远程 API 的搜索,并为结果显示和用户交互提供了灵活的配置选项。

来源: src/definitions/modules/search.js11-34 src/definitions/modules/search.less1-25

架构

核心组件

该组件包含以下关键元素

  1. 提示 - 用户输入搜索查询的输入字段
  2. 搜索按钮 - 可选的用于启动搜索的按钮
  3. 结果容器 - 显示搜索结果
  4. 结果项 - 单个搜索结果
  5. 类别 - 搜索结果的可选分组

该组件构建为 jQuery 插件,并为用户交互(如焦点、失焦和按键事件)注册事件处理程序。

来源: src/definitions/modules/search.js37-79 src/definitions/modules/search.less25-52

DOM 结构

DOM 结构遵循 Semantic UI 的基于类的模式,并为搜索界面的不同部分包含嵌套元素。该组件根据搜索结果动态管理此结构。

来源: src/definitions/modules/search.js96-107 src/definitions/modules/search.less67-111

搜索功能

搜索过程流程

该组件处理用户输入并根据配置执行搜索。当用户在搜索提示中键入时,组件可以立即搜索或等待指定的延迟。然后,它会过滤本地数据或发出 API 请求,并在准备好时显示结果。

来源: src/definitions/modules/search.js146-158 src/definitions/modules/search.js251-268

搜索组件可以根据搜索查询过滤本地数据。这对于客户端搜索很有用,当所有数据都已可用时。

主要功能

  • 不区分大小写的匹配
  • 支持全文搜索或精确匹配
  • 可选项:按标题、内容或两者进行搜索

本地搜索实现在 filterResults 方法中,该方法根据搜索查询过滤对象数组。

来源: src/definitions/modules/search.js784-837 src/definitions/modules/search.js848-881

远程搜索 (API)

对于大型数据集或动态内容,搜索组件可以查询远程 API 来获取结果。这使用了 API 模块(api.js)来处理请求。

主要功能

  • 可配置的 API 端点
  • 支持请求限流
  • 结果自动缓存(可选)
  • 请求期间的加载状态指示

远程搜索设置

来源: src/definitions/modules/search.js334-362 src/definitions/behaviors/api.js172-272

搜索组件支持基于类别的结果,其中结果按类别分组。这可以与本地和远程数据一起使用。

本地数据类别搜索示例

类别显示有标题分隔不同的结果组。

来源: src/definitions/modules/search.js445-450 src/definitions/modules/search.less172-181

用户交互

键盘导航

该组件支持键盘导航,以提高可访问性和用户体验

  • 向上/向下箭头:在结果中导航
  • 回车键:选择当前高亮显示的结果
  • Esc 键:关闭结果面板

键盘事件处理实现在 handleKeyboard 方法中。

来源: src/definitions/modules/search.js251-332

加载状态

在远程搜索期间,组件可以显示加载指示器来通知用户结果正在获取中。这使用了 Semantic UI 的加载组件。

通过向搜索组件添加 loading 类来切换加载状态。

来源: src/definitions/modules/search.less198-202 src/definitions/elements/loader.less22-68

结果选择

当用户选择结果(通过单击或按 Enter)时,该组件会

  1. 检索选定的值
  2. 更新输入(可选)
  3. 调用 onSelect 回调
  4. 隐藏结果面板

来源: src/definitions/modules/search.js209-247

定制

设置

该组件提供了许多设置来定制其行为

设置类型默认描述
apiSettings对象{}传递给 API 模块的设置
minCharacters整型1搜索的最小字符数
searchDelay整型300搜索前的延迟(毫秒)
transition字符串'fade'显示结果时的动画
duration整型300动画的持续时间
maxResults整型7要显示的最大结果数
cache布尔值true是否缓存 API 结果
sourceArray/Objectfalse结果的本地源
searchFields数组['title', 'description']要搜索的字段
fullTextSearch布尔值/字符串'exact''exact' 或 true 表示模糊匹配
类型字符串'standard''standard' 或 'category'
showNoResults布尔值true没有结果时显示消息

来源: src/definitions/modules/search.js37-60

事件和回调

该组件提供了几个回调函数来挂钩其行为

回调描述
onSelect选择结果时调用
onResultsAdd将结果添加到 DOM 后调用
onSearchQuery执行搜索查询时调用
onResults返回结果时调用
onResultsOpen打开结果时调用
onResultsClose关闭结果时调用

来源: src/definitions/modules/search.js58-67

样式

搜索组件的外观可以通过 search.variables 中定义的变量进行自定义。

  • 提示样式(背景、内边距、边框等)
  • 结果容器样式(宽度、背景、阴影)
  • 结果项样式(内边距、字体大小、颜色)
  • 动画设置

该组件使用 LESS 变量来实现 Semantic UI 的主题一致性。

来源: src/themes/default/modules/search.variables1-77 src/definitions/modules/search.less10-52

与其他组件的集成

搜索组件与其他几个 Semantic UI 组件集成

  1. API 模块 - 用于远程搜索请求
  2. Loader - 在 API 请求期间显示加载状态
  3. Dropdown - 共享相似的交互模式和部分代码

搜索组件在很多方面与下拉组件相似,但专门侧重于搜索功能。

来源: src/definitions/modules/search.js334-362 src/definitions/behaviors/api.js22-43 src/definitions/elements/loader.less25-68

使用示例

来源: src/definitions/modules/search.js142-167 src/definitions/modules/search.js334-362

性能考量

  • 使用 searchDelay 来防止过多的 API 调用
  • 为 API 结果启用 cache 以减少重复请求
  • 对于大型数据集,请使用远程搜索而不是本地搜索
  • 考虑限制 maxResults 以提高渲染性能

来源: src/definitions/modules/search.js146-157 src/definitions/behaviors/api.js140-152