找回密码
 立即注册

QQ登录

只需一步,快速开始

Fiooona
论坛元老   /  发表于:2019-6-14 18:06  /   查看:4408  /  回复:2
本帖最后由 Fiooona 于 2019-6-14 18:09 编辑

    SpreadJS是一款类Excel的纯前端表格控件,可以与现在主流的框架VUE、Angular、React轻松集成。本文介绍如何实现单元格中高亮显示搜索框中的内容,效果如下图:
image.png960995788.png image.png958065185.png
输入要搜索的内容,可以单元格中高亮显示搜索到的文字,使用SpreadJS的自定义单元格可以实现这种效果。
下面我们说明下实现步骤:
1.定义一个自定义单元格类型:HighlightSearchCellType,继承GC.Spread.Sheets.CellTypes.Text()
  1. function HighlightSearchCellType() {}
  2.         HighlightSearchCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
复制代码
2.实现paintValue方法,根据搜索框的值正则匹配单元格中的数据,匹配到的内容高亮显示

3.绑定单元格时设置ColumnInfo的cellType为HighlightSearchCellType
  1.   var columnInfo = [
  2.                 { name: "LastName", displayName: "中文名", cellType: new HighlightSearchCellType(), size:80 },
  3.                 { name: "FirstName", displayName: "英文名", cellType: new HighlightSearchCellType(), size: 80 },
  4.                 { name: "Phone", displayName: "电话", cellType: new HighlightSearchCellType(), size: 180 },
  5.                 { name: "Email", displayName: "邮箱", cellType: new HighlightSearchCellType(), size: 200 },
  6.             ];
  7.   sheet.bindColumns(columnInfo);
复制代码
4.监听键盘抬起事件,重新获取搜索框中的值,刷新页面
  1.   document.getElementById("searchTxt").onkeyup = (function() {
  2.         sheet.searchText = document.getElementById("searchTxt").value;
  3.         spread.repaint();
  4.         });
复制代码
自定义单元格更多资料
SpreadJS中文学习指南:https://demo.grapecity.com.cn/SpreadJS/TutorialSample/#/demos/customCellType
完整代码可下载附件Demo

SearchHighlight.zip

2.75 KB, 下载次数: 95

组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!

2 个回复

倒序浏览
sssssss
金牌服务用户   /  发表于:2022-8-4 18:16:00
沙发
请问如何使查找到的单元格背景高亮
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-4 18:31:22
板凳
可以加上这两句代码在原来的代码中
  1.                 ctx.fillStyle = "yellow";
  2.                 ctx.fillRect(x, y, w, h);
复制代码


修改后的代码

  1.             if (blocks) {
  2.                 ctx.fillStyle = "yellow";
  3.                 ctx.fillRect(x, y, w, h);
  4.                 for (var i = 0; i < blocks.length; i++) {
  5.                     var block = blocks[i];
  6.                     if (block.highlight) {
  7.                         ctx.fillStyle = "red";
  8.                     } else {
  9.                         ctx.fillStyle = originalStyle;
  10.                     }
  11.                     ctx.fillText(block.text, x + 2, y + adjY);
  12.                     x += ctx.measureText(block.text).width;
  13.                 }

  14.             } else {
  15.                 ctx.fillText(text, x + 2, y + adjY);
  16.             }
复制代码



image.png819903869.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部