跳转到内容

文本高亮 highlight

数据展示组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

命中关键词的片段渲染成 <mark>,其余是纯文本;整段文本原样拼得回来

曦寒 UI 是一套框架无关的设计系统运行时,组件的行为与皮肤各走各的。

一组关键词

传数组即可;同一处多个关键词都命中时取最长的那个,重叠只切出一段

曦寒 UI 是一套框架无关的设计系统运行时,组件的行为与皮肤各走各的。曦寒 UI 是一套框架无关的设计系统运行时,组件的行为与皮肤各走各的。

区分大小写

缺省不区分,开了 case-sensitive 就按写法比

XiHan UI 与 xihan ui 是同一个名字的两种写法。XiHan UI 与 xihan ui 是同一个名字的两种写法。

跟着输入高亮

关键词逐字符比对、不拼进正则,敲进 . * ( 这些字符也只当普通字符找

曦寒 UI 1.0 发布说明版本 120 的兼容性清单取值写作 a*b 时的转义规则

产物

自定义元素<xh-highlight>
Vue 组件XhHighlight
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/highlight.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="highlight"root · mark

Props

属性类型必填说明
caseSensitiveboolean区分大小写,缺省不区分。
keywordstring | readonly string[]关键词,一个或一组。空串会被丢掉。
textstring要显示的整段文本。命中位置按这个串逐字符算出来。

connect API

connect 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
textstring解析后的文本;没给时是空串。
segmentsreadonly HighlightSegment[]切好的片段,依次拼回去恒等于 text。
getRootProps() => T['element']
getMarkProps() => T['element']铺到每个命中片段上的属性;每段都一样,命中的是哪个关键词不落到 DOM 上。

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License