微信小程序实现全局搜索代码高亮的示例
程序员文章站
2024-01-22 08:20:10
需求
最近在做微信小程序的时候,需要实现在搜索框的输入内容的时候实现全局匹配实现高亮效果,目前的思路是,递归后台来返回的数据,并将对象的value值替换为需要的dom...
需求
最近在做微信小程序的时候,需要实现在搜索框的输入内容的时候实现全局匹配实现高亮效果,目前的思路是,递归后台来返回的数据,并将对象的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 }) } })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: python语法之流程控制