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


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中使用构造函数实现继承的代码
Aug 12 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
浅谈setTimeout 与 setInterval
Jun 23 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
jQuery入门之层次选择器实例简析
Dec 11 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
JavaScript函数柯里化原理与用法分析
Mar 31 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
Vue 中的compile操作方法
Feb 26 Javascript
JS sort方法基于数组对象属性值排序
Jul 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实现RSA加密类实例
2015/03/26 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
python的turtle库使用详解
2019/05/10 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
技术总监个人的自我评价范文
2013/12/18 职场文书
乡下人家教学反思
2014/02/01 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
美容院营销方案
2014/03/05 职场文书
求职信名称怎么写
2014/05/26 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python