This time I will show you how to achieve result highlighting during global search. What are the precautions for achieving result highlighting during global search? Here is a practical case, let’s take a look.
Requirements
When I was working on a WeChat applet recently, I needed to achieve global matching and highlight effects when entering content in the search box. The current idea is , recursively return the data in the background, and replace the value of the object with the required dom node, and achieve the highlighting effect through rich-text.
Code
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 }) } })
I believe you have mastered the method after reading the case in this article, more Please pay attention to other related articles on the php Chinese website!
Recommended reading:
angular4 Multiple components communicate with each other
Detailed explanation of the steps for Vue to reference external style files
The above is the detailed content of How to achieve result highlighting during global search. For more information, please follow other related articles on the PHP Chinese website!