Skip to content

Highlight 文本高亮 ​

文本命中高亮组件:text(原文)+ highlight(关键词,空格多词或 JSON 数组)计算命中片段,命中部分渲染为 <mark>(配色走主题 token,dark 自动适配)。支持大小写敏感、整词匹配、重音敏感三个开关(缺省均不敏感,重音折叠走 String.normalize('NFD') 去组合附加符)。内容重算后派发 oas-count(detail { count, matches })。

基础用法 ​

单关键词高亮

多关键词 ​

空格分隔多个关键词;或传 JSON 数组(如 '["fox","dog"]')。命中区间重叠时自动合并,不产生嵌套 <mark>。

空格分隔多词

JSON 数组

大小写 / 整词 / 重音 ​

三个开关缺省均关闭(不敏感);布尔属性在场即生效。

case-sensitive:大小写敏感

whole-word:整词匹配

accent-sensitive:重音敏感(缺省折叠 é ↔ e)

whole-word 的词边界按 Unicode 字母/数字/下划线(含汉字)判定:相邻字符是词字符则不算整词,因此中文关键词被汉字包围时不命中(中文没有空格词边界,属保守正确行为)。

命中计数(oas-count) ​

属性变化触发内容重算后派发 oas-count,detail { count, matches }:count 为渲染的 <mark> 片段数(含 0),matches 为实际命中的关键词去重列表。下方 demo 点击按钮切换关键词组,反馈文本实时更新(组件挂载首帧的首次派发早于手动 addEventListener 注册,与 DOM 原生事件同步派发语义一致;框架事件绑定不受影响)。

oas-count 事件反馈

关键词:组件 复用关键词:框架 平台关键词:不存在

空态与安全 ​

  • 无 text、无 highlight 或零命中时:原文原样渲染(或渲染空),零 <mark>;oas-count 仍派发 count: 0,宿主可据此展示「无结果」。
  • highlight 以 [ 开头时按 JSON 数组解析,解析失败或非数组回退按空白分隔拆词;空串与非字符串项被过滤。
  • 原文与关键词一律按纯文本渲染(DOM textContent 通道),HTML 片段不会被解析执行。

字号与行内排布 ​

宿主为行内盒(display: inline),可自然嵌入段落文本流;字号、行高继承外层排版上下文。

API ​

oas-highlight ​

属性 ​

属性说明类型默认值
accent-sensitive重音敏感(缺省 NFD 折叠重音)boolean—
case-sensitive大小写敏感(缺省不敏感)boolean—
highlight关键词:空格多词或 JSON 数组;解析失败回退空白分隔——
text原文文本——
whole-word整词匹配(缺省否;Unicode 字母/数字词边界)boolean—

事件 ​

事件说明
oas-count内容重算后派发,detail: { count, matches }

CSS 变量 ​

CSS 变量默认值
--oas-highlight-bgcolor-mix(in srgb, var(--oas-preset-gold) 22%, transparent)
--oas-highlight-colorvar(--oas-color-text-primary)

Parts ​

Part说明
highlight命中片段(mark)
root内容容器

基于 MIT OR Apache-2.0 双许可发布