Angular:搜索关键字,高亮显示关键字

需求

  • 在输入框输入关键字,不区分大小写搜索信息,若有跟关键字相匹配的结果则高亮显示。
  • 删除输入框的内容,高亮文字恢复原样
  • 搜索新内容,前一个搜索内容的高亮文字恢复原样

实现结果

在输入框输入“月”
在这里插入图片描述

实现过程

<!-- 搜索框 -->
 <div class="input-box">
      <input
        type="text"
        placeholder="{{ 'Search by keywords' | translate }}"
        [(ngModel)]="searchText"
        (keypress)="$event.which === 13 ? searchData() : 0"
      />
      />
      <em (click)="clearData()" *ngIf="searchText !== null"></em>
</div>
      <!-- 表格 -->
      <nz-table #basicTable [nzShowPagination]="false" [nzData]="[{}]">
        <thead>
          <tr>
            <th nzWidth="200px">{{ 'classify ' | translate }}</th>
            <th>{{ 'desc ' | translate }}</th>
          </tr>
        </thead>
        <tbody>
          <tr *ngFor="let data of classification">
            <td *ngIf="data.classify !== null">{{ data.classify }}</td>
            <!-- 标记要查询关键字的栏位 -->
            <td #keyWords *ngIf="data.classify !== null">{{ data.desc }}</td>
          </tr>
        </tbody>
      </nz-table>
import { ElementRef, QueryList, Renderer2, ViewChild, ViewChildren } from '@angular/core';
@ViewChildren('keyWords') keyWords: QueryList<ElementRef>;

  // 搜索輸入框的內容
  searchData() {
    this.keyWords.forEach((el) => {
      el.nativeElement.innerHTML = el.nativeElement.innerHTML.replace(/(<\/?span.*?>)/g, '');
      let content = el.nativeElement;
      let tempHTML = el.nativeElement.innerHTML;
      const values = tempHTML.split(this.searchText.toUpperCase());
      content.innerHTML = values.join(`<span style="color:#55C3F6; #test">${this.searchText.toUpperCase()}</span>`);
    });
  }

  // 清除输入框的内容
  clearData() {
    this.searchText = null;
    this.keyWords.forEach((el) => {
      el.nativeElement.innerHTML = el.nativeElement.innerHTML.replace(/(<\/?span.*?>)/g, '');
    });
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值