很多項目中會有搜索,有時是要點擊搜索按鈕時搜索,有時是點擊鍵盤完成搜索,還有時需要實時搜索,而高亮關鍵字也是一個常見的需求。
今天寫一個實時搜索并高亮關鍵字的微信小程序demo,已上傳GitHub,需要自取
微信小程序實時搜索高亮關鍵字demo
這是一個我項目中的截圖,但是數據結構又略微有點復雜,不好演示,所以單獨又寫了一個demo,數據來自干活集中營

實時搜索高亮關鍵字
關鍵函數:將字符串使用關鍵字分割:
-
//返回一個使用key切割str后的數組,key仍在數組中
-
getHilightStrArray: function(str, key) {
-
return str.replace(new RegExp(`${key}`, 'g'), `%%${key}%%`).split('%%');
-
}
一、新建一個自定義組件,作為顯示有高亮字符串的組件
1、在自定義組件wxml中循環數組并判斷是否是關鍵字然后設置不同的class,代碼如下:
-
<view>
<text wx:for="{{searchArray}}" wx:key="*this" class="{{item == keyName ? 'highlight' : 'normal' }}">{{item}}</text>
</view>
|
2、在自定義組件js中,定義傳入key和str的屬性對象datas
-
properties: {
/**
* {key:'關鍵字',name:'待匹配字符串'}
*/
datas: {
type: Object,
observer: "_propertyDataChange"
}
},
|
開始是單獨傳入key和name,表現正常,但是發現在某些特殊情況得不到想要的結果,這里就不列出來了,有興趣的朋友可以自己嘗試。 3、在自定義組件js中,處理傳入的數據
-
methods: {
_propertyDataChange: function(newVal) {
console.log(newVal)
let searchArray = this.getHilightStrArray(newVal.name, newVal.key)
this.setData({
keyName: newVal.key,
searchArray: searchArray
})
},
getHilightStrArray: function(str, key) {
return str.replace(new RegExp(`${key}`, 'g'), `%%${key}%%`).split('%%');
}
}
|
|