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


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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
基于Jquery的开发个代阴影的对话框效果代码
Jul 28 Javascript
js Html结构转字符串形式显示代码
Nov 15 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
Jul 10 Javascript
js canvas实现画图、滤镜效果
Nov 27 Javascript
微信小程序云开发之使用云存储
May 17 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
JavaScript 生成唯一ID的几种方式
Feb 19 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
生成sessionid和随机密码的例子
2006/10/09 PHP
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
dedecms模版制作使用方法
2007/04/03 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
学习php中的正则表达式
2014/08/17 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
Underscore源码分析
2015/12/30 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python下载文件时显示下载进度的方法
2015/04/02 Python
Python使用turtule画五角星的方法
2015/07/09 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
基于python 凸包问题的解决
2020/04/16 Python
印尼旅游网站:via
2017/11/12 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
关键字final的用法
2013/10/02 面试题
师德师风自查材料
2014/10/14 职场文书
公司承诺函范文
2015/01/21 职场文书
教师学期末个人总结
2015/02/13 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书