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


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 相关文章推荐
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
jQuery中first()方法用法实例
Jan 06 Javascript
javascript实现动态改变层大小的方法
May 14 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
May 16 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
在vue中封装方法以及多处引用该方法详解
Aug 14 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学习之 循环结构实现代码
2011/06/09 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
Bootstrap表单布局
2016/07/19 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
python模块如何查看
2020/06/16 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
大学本科毕业生的自我鉴定
2013/11/26 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
项目负责人任命书
2014/06/04 职场文书
妇女工作先进事迹
2014/08/17 职场文书
田径运动会通讯稿
2014/09/13 职场文书
保洁员岗位职责
2015/02/04 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
高老头读书笔记
2015/06/30 职场文书