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


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怎么把&amp;字符换成&quot;&amp;amp:&quot;
Oct 19 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
Nov 04 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
Area 区域实现post提交数据的js写法
Apr 22 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
Oct 26 Javascript
jQuery表单域属性过滤器用法分析
Feb 10 Javascript
js实现类似MSN提示的页面效果代码分享
Aug 24 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 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
我的论坛源代码(七)
2006/10/09 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
简单了解Django项目应用创建过程
2020/07/06 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
详细的大学生创业计划书模板
2014/01/27 职场文书
交通事故协议书范文
2014/04/16 职场文书
职务任命书范本
2014/06/05 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
打架检讨书
2015/01/27 职场文书
副总经理岗位职责
2015/02/02 职场文书
博士论文答辩开场白
2015/06/01 职场文书
宾馆安全管理制度
2015/08/06 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
Java使用HttpClient实现文件下载
2022/08/14 Java/Android