【vue+element ui】select实时搜索模糊查询,匹配文字高亮显示,下拉选中定位菜单高亮并显示对应内容(效果同input输入框实时搜索)

在这里插入图片描述
参考element ui select的远程搜索
在这里插入图片描述
对应属性的解释
在这里插入图片描述在这里插入图片描述

 <el-select
          class="inputInfo"
          v-model="searchcursom"
          filterable
          clearable
          remote
          placeholder="搜索内容"
          :remote-method="querySearch"
          @change="handleSelect"
          :loading="loading"
         @clear="removeclear"

        >
          <template slot="prefix">//输入框前搜索图标和后搜索文字
            <i class="el-icon-search prefixSearch"></i>
            <span class="prefixSpan">搜索</span>
          </template>
          <el-option
            v-for="item in helpList"
            :disabled="item.disabled"
            :key="item.fPkHelpCenterId"
            :label="item.fVcHelpCenterName"
            :value="item.fPkHelpCenterId"
          >
            <div v-html="item.parsename"></div>
          </el-option>
            <div slot="empty" style="height:30px;text-align:center;line-height:30px">无数据</div>//搜不到结果的时候展示对应的文字

        </el-select>
 data() {
    return {   
      menus: [],
      subMenuList: [],
      openKeys: [], 
      searchcursom: '',
      helpList: [],//模糊查询的数组集合
   }
  },

搜索事件

    querySearch(queryString) { 
      if (queryString == '') return (this.helpList = [])  //当无内容的时候,数组为空,不展示下拉列表
      this.loading = true
      this.helpList = []
      getHelpByquery({ keyWord: queryString }).then((res) => {//调接口,拿到模糊查询到的数据
        this.loading = false
        if (res && res.code == 0) {
          this.searchcursom = queryString
          this.helpList = res.data       
          this.setHighlight(this.helpList, queryString) // 匹配文字高亮显示
        }
      })
    },

设置文字高亮

 setHighlight(arr, keyword) {
      if (arr && arr.length > 0 && keyword) {
        arr.unshift({ fPkHelpCenterId: 0, fVcHelpCenterName: '文档名称', disabled: true })//我这里下拉列表有个默认值,
        //如果你不需要可以不加
        arr = arr.filter((item) => {
          let wordname = '文档名称'//可以不加
          let reg = new RegExp(this.searchcursom, 'g')
          let regresult = new RegExp('文档名称', 'g')//可以不加
          let replaceString = `<span style="color:#ff8c00;padding:0">${keyword.trim()}</span>`
          let replaceone = `<span style="color:#ccc;padding:0">${wordname.trim()}</span>`//可以不加
          if (item.fVcHelpCenterName.match(reg)) {
            item.parsename = item.fVcHelpCenterName.replace(reg, replaceString)
            return item
          }    
          if (item.fVcHelpCenterName.match(regresult)) {//可以不加
            item.parsename = item.fVcHelpCenterName.replace(regresult, replaceone)
            return item
          }
        })
        return arr
      }
    },
  removeclear() {
      this.helpList = []
    },

下拉框的点击事件

 handleSelect(fPkHelpCenterId) {
      let arr = []
      arr.push(fPkHelpCenterId)
      this.selectedKeys = arr
      this.onMenuSelected(fPkHelpCenterId)
    },

菜单的点击事件

  onMenuSelected(fPkHelpCenterId) {
      let id = ''
      if (fPkHelpCenterId.length > 0) {
        id = fPkHelpCenterId[0]
      } else {
        id = fPkHelpCenterId
      }
      this.mdSpinning = true
      getHelpById({ fPkHelpCenterId: id })
        .then((res) => {
          if (res) {          
            this.markDownTxt = res.fVcHelpCenterContent || ''
          } else {
            this.markDownTxt = ''
          }
        })
        .catch((err) => {
          this.markDownTxt = ''
        })
        .finally(() => {
          this.mdSpinning = false
        })
    },
  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于 Vue.jsElement UI前端模糊查询示例: Template: ```html <template> <el-input v-model="searchText" placeholder="请输入搜索内容" @input="handleSearch"></el-input> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> ``` Script: ```js <script> export default { data() { return { tableData: [ { name: '张三', age: 22, address: '北京市海淀区' }, { name: '李四', age: 25, address: '上海市浦东新区' }, { name: '王五', age: 28, address: '广州市天河区' }, { name: '赵六', age: 30, address: '深圳市南山区' }, { name: '钱七', age: 33, address: '重庆市渝北区' }, ], searchText: '', }; }, methods: { handleSearch() { if (this.searchText) { this.tableData = this.tableData.filter( (item) => item.name.includes(this.searchText) || item.address.includes(this.searchText) ); } else { this.tableData = [ { name: '张三', age: 22, address: '北京市海淀区' }, { name: '李四', age: 25, address: '上海市浦东新区' }, { name: '王五', age: 28, address: '广州市天河区' }, { name: '赵六', age: 30, address: '深圳市南山区' }, { name: '钱七', age: 33, address: '重庆市渝北区' }, ]; } }, }, }; </script> ``` 在上面的示例中,我们使用了 Element UI 的 el-input 和 el-table 组件来实现前端模糊查询。在 data 中定义了一个 tableData 数组,用来存储表格数据。在 methods 中定义了一个 handleSearch 方法,用来处理搜索事件。在 el-input 组件中绑定了 searchText 变量,用来存储用户输入的搜索内容。在 el-input 的 @input 事件中调用 handleSearch 方法,当 searchText 不为空时,使用 filter() 方法来过滤 tableData 数组,找到与 searchText 匹配的数据,然后更新 tableData 数组,这样就实现了前端模糊查询的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值