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


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 window.event对象详尽解析
Feb 17 Javascript
JS 参数传递的实际应用代码分析
Sep 13 Javascript
Javascript笔记一 js以及json基础使用说明
May 22 Javascript
Ajax 数据请求的简单分析
Apr 05 Javascript
一个关于javascript匿名函数的问题分析
Mar 30 Javascript
js获取判断上传文件后缀名的示例代码
Feb 19 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
Js代码中的span拼接问题解决
Nov 22 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 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/01/12 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
js获取域名的方法
2015/01/27 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
Servlet方面面试题
2016/09/28 面试题
给海归自荐信的建议
2013/12/13 职场文书
公积金单位接收函
2014/01/11 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
教师节大会主持词
2015/07/06 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
《社戏》教学反思
2016/02/22 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏