微信小程序实现全局搜索代码高亮的示例


Posted in Javascript onMarch 30, 2018

需求

最近在做微信小程序的时候,需要实现在搜索框的输入内容的时候实现全局匹配实现高亮效果,目前的思路是,递归后台来返回的数据,并将对象的value值替换为需要的dom节点,并且通过rich-text来实现,高亮效果。

代码

wxml:

<view class='homePage'>
  <input bindinput="bindKeyInput"></input>
  <view wx:for="{{newJson}}" wx:for-item='item' wx:key>
    <rich-text nodes="{{item.name}}"></rich-text>  
    <rich-text nodes="{{item.address}}"></rich-text>  
    <rich-text nodes="{{item.age}}"></rich-text>
    <view wx:if="{{item.aihao}}" wx:for="{{item.aihao}}" wx:for-item='sitem' wx:key>
      <rich-text nodes="{{sitem}}"></rich-text>  
    </view>
  </view>
</view>

js:

//index.js
const app = getApp()

Page({
  data: {
    json: [{ name: 'eiolewkfp', age: 'awdqwwdk', address: 'aueifwhefwfheffoewjowef',aihao:['sdsd','sdfsd','sdsf']}, { name: '98797', age: '6544656', address: '65494364' }], // 可以是任何类型的数据
    newJson: '',
    tempText:''
  },
  onLoad: function (options) {
    this.setData({
      newJson:this.data.json
    })
  },
  digui: function (newJson,obj,key) { // 递归方法,来遍历最内层的字符串并通过正则来替换
    var that = this;
    var reg = new RegExp(that.data.tempText,'g');
    if (newJson.constructor == Array) { 
      newJson.forEach(function (item,index) {
        if (item.constructor == String){
          obj[key].splice(index, 1, item.replace(reg, "<span style='color:red'>" + that.data.tempText + "</span>"))
        }else{
          that.digui(item, newJson);
        }
      });
    } else if (newJson.constructor == Object) {
      var json = {};
      for (var key in newJson) {
        json[key] = newJson;
        that.digui(newJson[key],newJson,key);
      }
    } else if (newJson.constructor == String) { // 这里做全局替换
      if(key){
        obj[key] = newJson.replace(reg, "<span style='color:red'>" + that.data.tempText + "</span>")
      }
    }
  },
  bindKeyInput: function (e) { // 每次输入来监听键盘,处理匹配的数据
    var text = e.detail.value;
    this.setData({
      tempText:text
    })
    var newJson = JSON.parse(JSON.stringify(this.data.json)); // 实现深复制
    
    this.digui(newJson);
    this.setData({
      newJson:newJson
    })
  }

})

源代码地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 两个窗体之间传值实现代码
Sep 25 Javascript
Notify - 基于jquery的消息通知插件
Oct 18 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
简单的js计算器实现
Oct 26 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
使用原生的javascript来实现轮播图
Feb 24 Javascript
如何在Angular应用中创建包含组件方法示例
Mar 23 Javascript
js类的继承定义与用法分析
Jun 21 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 #Javascript
Vue实现导出excel表格功能
Mar 30 #Javascript
理解 JavaScript EventEmitter
Mar 29 #Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 #Javascript
vue的diff算法知识点总结
Mar 29 #Javascript
vue文件树组件使用详解
Mar 29 #Javascript
vue全局组件与局部组件使用方法详解
Mar 29 #Javascript
You might like
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
js实现旋转木马效果
2017/03/17 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python os用法总结
2018/06/08 Python
Python给图像添加噪声具体操作
2019/03/03 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
中专毕业生自荐信
2013/11/16 职场文书
自我评价如何写好?
2014/01/05 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
医院工作检讨书范文
2014/02/10 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
运动会演讲稿100字
2014/08/25 职场文书
国际贸易实训总结
2015/08/03 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
opencv 分类白天与夜景视频的方法
2021/06/05 Python
vue项目支付功能代码详解
2022/02/18 Vue.js