实习随笔【借助 iview table 实现搜索命中高亮】

   与后端约定好命中的关键词用span标签包裹,前端拿到数据后利用正则表达式匹配并为其添加高亮类。

实现效果:

                           

实现方案:

1、准备正则转换函数
highLightSearchTermByHint(contentArg) {
          let content = contentArg;
          content = content.replace(/<span>([^<>]*)<\/span>/g, '<span class="high-light-log-detail">$1</span>');
          return content;
}
2、准备高亮类
.high-light-log-detail{
    background: rgba(87, 163, 243);
}
3、table 组件 render 函数渲染
{
            title: '关键词',
            // TODO 可能需要加key
            minWidth: 200,
            render: (h, params) => {
                // TODO message 改成入参
                const highlightedContent = this.highLightSearchTermByHint(params.row.address);
                return h('Tooltip', {
                    props: {
                        // content: highlightedContent,
                        placement: 'top',
                        maxWidth: 400,
                        transfer: true, // 【解决不能完全显示的bug】
                    },
                }, [
                    h('div', {
                        style: {
                            maxWidth: '300px', // 控制最大宽度
                            overflow: 'hidden',
                            textOverflow: 'ellipsis',
                            whiteSpace: 'nowrap',
                        },
                        domProps: {
                            innerHTML: highlightedContent,
                        },
                    }),
                    // 使用插槽,自定义Tooltip样式
                    h('div', {
                        slot: 'content', // 指定内容为插槽
                        domProps: {
                            innerHTML: highlightedContent
                        }
                    }),
                ]);
            },
        },
附完整代码:
<template>
  <Table border width="800" :columns="columns7" :data="data6"></Table>
</template>

<script>
  export default {
    data () {
      return {
        columns7: [
          {
            title: 'Name',
            key: 'name',
            render: (h, params) => {
              return h('div', params.row.name);
            }
          },
          {
            title: 'Age',
            key: 'age'
          },
          {
            title: '关键词',
            // TODO 可能需要加key
            minWidth: 200,
            render: (h, params) => {
                // TODO message 改成入参
                const highlightedContent = this.highLightSearchTermByHint(params.row.address);
                return h('Tooltip', {
                    props: {
                        // content: highlightedContent,
                        placement: 'top',
                        maxWidth: 400,
                        transfer: true, // 【解决不能完全显示的bug】
                    },
                }, [
                    h('div', {
                        style: {
                            maxWidth: '300px', // 控制最大宽度
                            overflow: 'hidden',
                            textOverflow: 'ellipsis',
                            whiteSpace: 'nowrap',
                        },
                        domProps: {
                            innerHTML: highlightedContent,
                        },
                    }),
                    // 使用插槽,自定义Tooltip样式
                    h('div', {
                        slot: 'content', // 指定内容为插槽
                        domProps: {
                            innerHTML: highlightedContent
                        }
                    }),
                ]);
            },
        },
          {
            title: 'Action',
            key: 'action',
            width: 150,
            align: 'center',
            render: (h, params) => {
              return h('div', [
                h('Button', {
                  props: {
                    type: 'primary',
                    size: 'small'
                  },
                  style: {
                    marginRight: '5px'
                  },
                  on: {
                    click: () => {
                      this.show(params.index)
                    }
                  }
                }, 'View'),
                h('Button', {
                  props: {
                    type: 'error',
                    size: 'small'
                  },
                  on: {
                    click: () => {
                      this.remove(params.index)
                    }
                  }
                }, 'Delete')
              ]);
            }
          }
        ],
        data6: [
          {
            name: 'John Brown',
            age: 18,
            address: '<span>2020</span>-<span>08</span>-<span>14</span> <span>15</span>:<span>25</span>:<span>New York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake Park'
          },
          {
            name: 'Jim Green',
            age: 24,
            address: 'Ottawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkLondon No. 1 Lake ParkNew York No. 1 Lake Park'
          },
          {
            name: 'Joe Black',
            age: 30,
            address: 'Ottawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkSydney No. 1 Lake ParkNew York No. 1 Lake Park'
          },
          {
            name: 'Jon Snow',
            age: 26,
            address: 'Ottawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake ParkOttawa No. 2 Lake ParkNew York No. 1 Lake ParkNew York No. 1 Lake Park'
          }
        ]
      }
    },
    methods: {
      show (index) {
        this.$Modal.info({
          title: 'User Info',
          content: `Name:${this.data6[index].name}<br>Age:${this.data6[index].age}<br>Address:${this.data6[index].address}`
        })
      },
      remove (index) {
        this.data6.splice(index, 1);
      },
      highLightSearchTermByHint(contentArg) {
          let content = contentArg;
          content = content.replace(/<span>([^<>]*)<\/span>/g, '<span class="high-light-log-detail">$1</span>');
          return content;
      }
    }
  }
</script>
<style>
.high-light-log-detail{
    background: rgba(87, 163, 243);
}
</style>

相关推荐

  1. WPF实现搜索文本

    2024-07-19 08:34:04       33 阅读
  2. 搜索中的关键字怎么实现

    2024-07-19 08:34:04       40 阅读
  3. qt实现文本

    2024-07-19 08:34:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 08:34:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 08:34:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 08:34:04       58 阅读
  4. Python语言-面向对象

    2024-07-19 08:34:04       69 阅读

热门阅读

  1. Ubuntu系统中升级OpenSSH到特定版本(如9.8p1)

    2024-07-19 08:34:04       17 阅读
  2. Linux网络 -- TCP FIN包发送超时时间设置

    2024-07-19 08:34:04       25 阅读
  3. 代码trick 类型判断

    2024-07-19 08:34:04       18 阅读
  4. vue如何解决跨域?原理?

    2024-07-19 08:34:04       19 阅读
  5. Go: IM系统基于xorm实现简单的注册和登录功能

    2024-07-19 08:34:04       20 阅读
  6. C语言13 位域

    2024-07-19 08:34:04       22 阅读
  7. Linux:使用vim编辑文件为什么会影响目录的mtime

    2024-07-19 08:34:04       18 阅读
  8. 数据结构讲解

    2024-07-19 08:34:04       20 阅读
  9. C++:类的定义和实例化

    2024-07-19 08:34:04       21 阅读
  10. NumPy库学习之logspace函数

    2024-07-19 08:34:04       21 阅读
  11. springMVC前后端请求参数绑定和传递

    2024-07-19 08:34:04       17 阅读
  12. C++中的socket编程常用接口

    2024-07-19 08:34:04       19 阅读
  13. Redis实现打卡功能

    2024-07-19 08:34:04       20 阅读
  14. 探索.NET内存之海:垃圾回收的艺术与实践

    2024-07-19 08:34:04       22 阅读