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


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控制上传文件的大小
Oct 26 Javascript
jQuery与ExtJS之选择实例分析
Aug 19 Javascript
获取鼠标在div中的相对位置的实现代码
Dec 30 Javascript
js查找节点的方法小结
Jan 13 Javascript
jQuery实现手机号码输入提示功能实例
Apr 30 Javascript
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
javascript中alert()与console.log()的区别
Aug 26 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
Aug 04 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 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检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
Javascript中Eval函数的使用说明
2008/10/11 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
javascript动态加载三
2012/08/22 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
Pandas标记删除重复记录的方法
2018/04/08 Python
Pandas中resample方法详解
2019/07/02 Python
python将字符串转换成json的方法小结
2019/07/09 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
业务部门经理岗位职责
2014/02/23 职场文书
文明演讲稿范文
2014/05/12 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
新入职员工工作总结
2015/10/15 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang