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


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比较文档位置
Apr 08 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
原生js代码实现图片放大境效果
Oct 30 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
js实现带箭头的进度流程
Mar 26 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
如何去掉文章里的 html 语法
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
用js编写留言板
2020/03/17 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python中logging包的使用总结
2018/02/28 Python
python中单下划线_的常见用法总结
2018/07/10 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
为什么使用接口?
2014/08/13 面试题
在求职信中如何凸显个人优势
2013/10/30 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
职工运动会邀请函
2014/02/02 职场文书
学生期末评语大全
2014/04/30 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle