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


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 DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
Mar 19 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
利用JS如何获取form表单数据
Dec 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
初学Javascript的一些总结
2008/11/03 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python实战购物车项目的实现参考
2019/02/20 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
易程科技软件测试笔试
2013/03/24 面试题
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
宣传普通话标语
2014/06/27 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js