element-ui select实现关键词高亮

效果图

在这里插入图片描述

代码

<template>
  <el-select
    v-model="value"
    clearable
    filterable
    remote
    :remote-method="remoteSearch"
    placeholder="请选择"
    @clear="handleClear"
  >
    <el-option
      v-for="item in options"
      :key="item.id"
      :label="item.label"
      :value="item.inner"
    >
      <div v-html="item.inner"></div>
    </el-option>
  </el-select>
</template>

<script>
import axios from "../../utils/request";
export default {
  data() {
    return {
      options: [],
      value: "",
    };
  },
  created() {
    this.querySearch()
  },
  methods: {
    remoteSearch(data) {
      console.log("remoteSearch---data:", data);
      this.value = data;
      this.options = [];
      this.querySearch();
    },
    async querySearch() {
      // mock 出来的数据
      const data = await axios.get("/api/getList");
      this.options = this.setHightLight(data, this.value);
    },
    // 设置高亮
    setHightLight(arr, keyword) {
      if (arr && arr.length > 0 && keyword) {
        arr = arr.filter((item) => {
          let reg = new RegExp(keyword, "g");
          let replaceString = `<span class='high'>${keyword.trim()}</span>`;
          if (item.inner.match(reg)) {
            //为了不影响原始name,我们这里给item重新设置一个parseName,模板中显示的是parseName
            item.inner = item.inner.replace(reg, replaceString);
            return item;
          }
        });
        return arr;
      }

      // 空返回原数组
      if (!keyword) {
        return arr;
      }
    },
    // 重置
    handleClear() {
      this.querySearch()
    },
  },
};
</script>

<style>
.high {
  color: #2baf6c !important;
}
</style>

mock数据

import Mock from 'mockjs'

let data = Mock.mock({
    'list|100':[{
        id:"@id",
        label:"@ctitle(5, 15)",
    }]
})

data = data.list.map((item)=>{
    return {
        ...item,
        inner:item.label
    }
})

Mock.mock('/api/getList',()=>{
    return {
        code:200,
        data
    }
})

欢迎点赞、评论、收藏,谢谢 ( 。ớ ₃ờ)ھ

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`el-tree-select`是Element UI库中的一个组件,它是一个基于树形结构的选择器,常用于展示层级关系的数据。要实现子级选中时父级自动高亮,通常需要配合组件的API和自定义事件来操作。以下是一个简化的步骤: 1. 首先,确保你的`el-tree-select`组件已经绑定了`props`或`data`属性,其中包含了树形结构的数据。 2. 给每个节点添加一个`key`属性,用于唯一标识节点。这对于跟踪父子关系很重要。 3. 当用户在子级选择节点时,触发一个自定义事件,比如`node-click`,在这个事件处理函数中,查找当前选中的子节点的父节点,并更新其状态。你可以使用`this.$refs.treeRef`来引用树组件实例,然后调用其提供的方法(如`getNodeByPath`)来找到父节点。 ```javascript <template> <el-tree ref="treeRef" :data="treeData" :props="defaultProps" @node-click="handleNodeClick" ></el-tree> </template> <script> export default { methods: { handleNodeClick(node) { if (node.parent) { // 获取父节点并更新其状态,这里假设你有一个高亮状态的字段 const parentNode = this.$refs.treeRef.getNodeByPath(node.parent.path); parentNode.highlighted = true; } }, }, // ...其他组件配置 }; </script> ``` 4. 如果你想在多个地方跟踪高亮状态,你可能需要创建一个全局变量或者在组件实例的data里维护一个数组来存储高亮的父节点。 记得在实际项目中,你需要根据你的具体数据结构和组件API来调整代码。如果有多个层级的高亮需求,你可能需要递归处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子羡爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值