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


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 利用Cookie记录用户登录信息
Dec 08 Javascript
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
使用apply方法实现javascript中的对象继承
Dec 16 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
Jqprint实现页面打印
Jan 06 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
antd Select下拉菜单动态添加option里的内容操作
Nov 02 Javascript
JS实现简单控制视频播放倍速的实例代码
Apr 18 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
PHP中的串行化变量和序列化对象
2006/09/05 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Vue2实现组件props双向绑定
2016/12/02 Javascript
Angular的$http与$location
2016/12/26 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
HR求职自荐信范文
2014/06/21 职场文书
团日活动总结报告
2014/06/25 职场文书
城南旧事电影观后感
2015/06/16 职场文书
工程款催款函
2015/06/24 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书