使用 Angular 指令进行自定义文本高亮显示

使用 Angular 指令进行自定义文本高亮显示

创建自定义指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { Directive, Input, ElementRef, AfterViewInit } from "@angular/core";

@Directive({
selector: "[appHighlight]",
})
export class HighlightDirective implements AfterViewInit {
@Input() highlightText: string = "";
@Input() highlightColor: string = "red";

constructor(private element: ElementRef) {}

ngAfterViewInit(): void {
this.highlightAction();
}

private highlightAction() {
const innerHTML = this.element.nativeElement.innerHTML;
if (!this.highlightText || !innerHTML) {
return;
}
const escapedHighlightText = this.escapeRegExp(this.highlightText);
const regex = new RegExp(`${escapedHighlightText}`, "gi");
const highlightedText = innerHTML.replace(
regex,
(match) => `<span style="color:${this.highlightColor}">${match}</span>`
);
this.element.nativeElement.innerHTML = highlightedText;
}

private escapeRegExp(text: string): string {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
}

默认红色

1
<div appHighlight [highlightText]="高亮"> 使用 Angular 指令进行自定义文本高亮显示 </div>

使用自定义颜色

1
2
<div appHighlight [highlightText]="高亮" [highlightColor]="yellow"> 使用 Angular 指令进行自定义文本高亮显示 </div>
<div appHighlight [highlightText]="高亮" [highlightColor]="#000"> 使用 Angular 指令进行自定义文本高亮显示 </div>

使用 Angular 指令进行自定义文本高亮显示
https://tedding.dev/2024/04/03/18ea3582a40.html
作者
TED.DING
发布于
2024年4月3日
许可协议