vue中的搜索关键字实例讲解

目录
  • vue的搜索关键字
    • 1、定义一个搜索框
    • 2、循环遍历,之前
    • 3、在data中,我们写入如下数据
    • 4、在methods中
    • 5、我们还可以这样写
  • 搜索功能及搜索结果关键字高亮
    • 首先实现搜索功能
    • 通过computed计算属性监听搜索内容的变化
    • 下边实现搜索关键字高亮显示

vue的搜索关键字

1、定义一个搜索框

<label>
    搜索关键字:
    <input type="search" name="" id="" value="" v-model="keywords"/>
</label>

2、循环遍历,之前

v-for 中的数据,都是直接从 data 上的list中直接渲染过来的,现在,我们自定义了一个 search 方法,同时,把所有的关键字,通过传参的形式,传递给了 search 方法,在 search 方法内部,通过 执行 for 循环,把所有符合 搜索关键字的数据,保存到一个新数组中,返回

<tr v-for="item in search(keywords)" :key="item.id">
    <td>{{ item.id }}</td>
    <td v-text="item.name"></td>
    <td>{{ item.ctime }}</td>
</tr>

3、在data中,我们写入如下数据

data:{
    id:'',
    name:'',
    keywords:'',
    list:[
        {id:1,name:'李白',ctime:new Date()},
        {id:2,name:'关羽',ctime:new Date()},
        {id:3,name:'韩信',ctime:new Date()},
        {id:4,name:'花木兰',ctime:new Date()},
        {id:5,name:'貂蝉',ctime:new Date()},
        {id:6,name:'露露',ctime:new Date()},
        {id:6,name:'大乔',ctime:new Date()},
        {id:6,name:'荆轲',ctime:new Date()},
        {id:6,name:'项羽',ctime:new Date()},
        {id:6,name:'典韦',ctime:new Date()},
        {id:7,name:'小乔',ctime:new Date()}
    ]
},

4、在methods中

我们根据关键字,进行数据的搜索

methods:{
        search(keywords) {//根据关键字,进行数据的搜索
                var newList = []
                    this.list.forEach(item => {
                if(item.name.indexOf(keywords) != -1){
                            newList.push(item)
                    }
                })
                return newList
            }
    }

5、我们还可以这样写

注意:forEach some filter findIndex 这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关的操作

注意:ES6 中,为字符串提供了一个新方法,叫做String.prototype.includes('要包含的字符串'),如果包含,则返回 true,否则返回 false

methods:{undefined

methods:{
    search(keywords) {//根据关键字,进行数据的搜索
                //注意: forEach    some    filter    findIndex    这些都属于数组的新方法,
                //都会对数组中的每一项,进行遍历,执行相关的操作;
                return this.list.filter(item=>{
                    //if(item.name.indexOf(keywords) != -1)
                    
                    //注意: ES6 中,为字符串提供了一个新方法,叫做 String.prototype.includes('要包含的字符串')
                    //如果包含,则返回 true ,否则返回 false
                    //contains  
                    if(item.name.includes(keywords)){
                        return item
                    }
                })        
                }
            }

搜索功能及搜索结果关键字高亮

先看效果图:

首先实现搜索功能

<div>
   <span>景点搜索:</span>
   <el-input prefix-icon="el-icon-search" placeholder="请输入景点名称或地区进行搜索" v-model="filters.searchVal" clearable></el-input>
</div>

通过computed计算属性监听搜索内容的变化

computed: {
    list: function () {
         var _this = this;
         var arrByZM = []; // 定义一个新的空数组用来存储匹配到的内容
         for (var i = 0; i < _this.addressList.length; i++) {
             if (_this.addressList[i].name.search(_this.filters.searchVal) != -1 || _this.addressList[i].address.search(_this.filters.searchVal) != -1) {
                 arrByZM.push(_this.addressList[i]); // 将匹配到的内容添加到arrByZM数组中
             }
         }
         return arrByZM;// 返回新的数组
    }
},

以上实现搜索功能

下边实现搜索关键字高亮显示

使用v-html绑定方法名并传递两个参数,第一个参数是:景点名称;第二个参数是:搜索框内输入的搜索内容

<div class="xph-list-r">
    <div>景点:<span v-html="brightenKeyword(item.name, filters.searchVal)" ></span></div>
    <div>位置:<span v-html="brightenKeyword(item.address, filters.searchVal)" ></span></div>
</div>

在methods中添加方法让搜索到的关键字高亮显示(以下提供两种方法,本人使用的是第二种)

methods:{
   brightenKeyword(val, keyword) {
      // 方法1:筛选变色
      // val = val + '';
      // if (val.indexOf(keyword) !== -1 && keyword !== '') {
      //     return val.replace(keyword, '<font color="#409EFF">' + keyword + '</font>')
      // } else {
      //     return val
      // }
       // 方法2:用正则表达式
       const Reg = new RegExp(keyword, 'i');
       if (val) {
          const res = val.replace(Reg, `<span style="color: #3aa1ff;">${keyword}</span>`);
             // console.log(res);
             return res;
       }
   },
},

至此完成搜索效果及搜索结果关键字高亮效果。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue2实现搜索结果中的搜索关键字高亮的代码

    具体代码如下所示: // 筛选变色 brightenKeyword(val, keyword) { val = val + ''; if (val.indexOf(keyword) !== -1 && keyword !== '') { return val.replace(keyword, '<font color="#409EFF">' + keyword + '</font>') } else { return val } } // 或者用

  • Vue实现搜索结果高亮显示关键字

    本文实例为大家分享了Vue实现搜索结果高亮显示关键字的具体代码,供大家参考,具体内容如下 1. 需要解决的问题 父组件将搜索的字段传到子组件 子组件接受数据,正则匹配,并替换字段 2. 具体代码 父组件代码 <template> <div> <div v-if="showMe"> <div class="re_search"> <svg @click="$router.go(-1)">

  • vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)

    1.首先在index.html引入高德地图的秘钥.如图: 注意:如果使用关键字搜索功能要加上 plugin=AMap.Autocomplete,AMap.PlaceSearch,否则功能无法使用,并会报错 2. 定位功能,代码如下: const map = new AMap.Map(this.$refs.container, { resizeEnable: true }) // 创建Map实例 const options = { 'showButton': true, // 是否显示定位按钮 '

  • vue中添加与删除关键字搜索功能

    具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible

  • 基于vue实现多引擎搜索及关键字提示

    本文实例为大家分享了vue实现多引擎搜索及关键字提示的具体代码,供大家参考,具体内容如下 关键代码: <div class="header-search"> <form id="form" action="http://m.baidu.com/s" method="get" accept-charset="utf-8" class="clearfix" autocomp

  • vue+Element实现搜索关键字高亮功能

    最近做了一个日志搜索的需求,要在页面上实现海量日志的关键字搜索.为了搜索更清晰,我最终实现了多条件搜索,且搜索结果的记录中的关键字全部高亮. 一.实现思路 1 实时监控表格,实现关键字的定位: 2 点击搜索按钮以后,实现记录中关键字的样式变化(即高亮). 二.实现过程 1 搜索条件表单 了解了实现思路,就让我们一起来看一下实现过程(关键位置均给了注释) <el-form :inline="true" :model="formQuery" > <el

  • vue中的搜索关键字实例讲解

    目录 vue的搜索关键字 1.定义一个搜索框 2.循环遍历,之前 3.在data中,我们写入如下数据 4.在methods中 5.我们还可以这样写 搜索功能及搜索结果关键字高亮 首先实现搜索功能 通过computed计算属性监听搜索内容的变化 下边实现搜索关键字高亮显示 vue的搜索关键字 1.定义一个搜索框 <label>     搜索关键字:     <input type="search" name="" id="" va

  • vue中4个自定义指令讲解及实例用法

    四个实用的vue自定义指令 1.v-drag 需求:鼠标拖动元素 思路: 元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始点击元素时的坐标 + 初始点击时元素距离可视区域的top.left. 将可视区域作为边界,限制在可视区域里面拖拽.[相关推荐:<vue.js教程>] 代码: Vue.directive('drag', { inserted(el) { let header = el.querySelector('.dialog_header') header.style.cssText +=

  • Java中instanceof关键字实例讲解

    目录 1.向上转型 向下转型 2.强制类型转换的应用 3.instanceof 关键字使用 4.测试举例 5.强制类型转换成功总结 1.向上转型 向下转型 2.强制类型转换的应用 应用多态性时由于引用为父类类型,导致编译时只能调用父类中声明的属性和方法.子类特有的属性和方法不能调用.因此可将父类引用强制转换为子类引用,则可调用子类特有方法. class Animal { public void shout() { System.out.println("Animal is shouting &q

  • vue项目中使用ueditor的实例讲解

    以vue-cli生成的项目为例 1.static文件夹下先放入ueditor文件 2.index.html添加如下代码 <script type="text/javascript" charset="utf-8" src="static/ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="

  • 利用solr实现商品的搜索功能(实例讲解)

    后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可能是根据数据库的字段查询的,那是怎么查询出来的呢,为什么千奇百怪的关键字都可以查询出来呢? 答案就是全文检索工具的实现,luncence采用了词元匹配和切分词.举个例子:北京天安门------luncence切分词:北京 京天 天安 安门 等等这些分词.所以我们搜索的时候都可以检索到. 有一种分词器

  • vue下canvas裁剪图片实例讲解

    由于时间关系 代码没有做整理大家有什么不懂得可以留言: 代码的主题思路备注中都有 大家可以看看 我的博客中还有关于canvas绘制矩形的文章有需要的可以看一下: HTML代码: 第一行的canvas为裁剪后展示用:div中的canvas存放原有尺寸的图片 <canvas id="canvasImg1" style=" position: absolute; margin: 2px 0 0 0"></canvas> <div id=&qu

  • java中调用super的实例讲解

    在java中类之间也是有着继承关系的,就我们之前有提到不少父类与子类的一些问题. 讲的以子类的调用为主,那么有小伙伴知道父类的调用方法吗?这里我们需要借助关键字super来实现.下面我们就来讲讲super的概念.调用方法.应用范围,帮助大家找到使用supei调用父类的方法. 1.概念 super关键字用于引用使用该关键字的类的超类. 作为独立语句出现的 super 表示调用超类的构造方法. 2.调用超类方法 super.<methodName>() 只有在如下情况中才需要采用这种用法:要调用在

  • vue.js刷新当前页面的实例讲解

    在我们修改过页面的某些数据后,通过想要把页面刷新一下,看看修改后的结果.由于vue的存在,页面是不会自动刷新的,需要我们手动进行操作.在vue里有三种刷新方法,最推荐的就是组合控制法,另外另种方法也会分享给大家学习,下面我们一起来看看vue如何刷新页面吧. 1.强制刷新 window.location.reload() 原生 js 提供的方法: this.$router.go(0),vue 路由里面的一种方法: 这两种方法都可以达到页面刷新的目的,简单粗暴,但是用户体验不好,相当于按 F5 刷新

  • Vue中组件的数据共享分析讲解

    目录 组件之间的关系 父子组件之间的数据共享 兄弟组件之间的数据共享 EventBus的使用步骤 组件之间的关系 在项目开发中,组件之间的最常见的关系分为两种 父子关系 兄弟关系 父->子共享数据 父组件向子组件共享数据需要使用自定义属性. 父子组件之间的数据共享 父组件: <template> <div id="app"> <h1>app根组件</h1> <left :msg="message" :use

  • 基于vue.js路由参数的实例讲解——简单易懂

    vue中,我们构建单页面应用时候,一定必不可少用到vue-router vue-router 就是我们的路由,这个由vue官方提供的插件 首先在我们项目中安装vue-router路由依赖 第一种,我们提供命令行来安装 npm install vue-router --save 第二种,我们直接去官方github下载 https://github.com/vuejs/vue-router 路由参数设置 1,实例化一个路由,然后路由映射表中的地址带参数,这个参数就是路由的参数 接着给映射表中的路由设

随机推荐