微信小程序搜索建议富文本的实现
封装字符串转换的函数 stringToNodes
export default function stringToNodes(keyword, value) {
const nodes = []
if (keyword.toUpperCase().startsWith(value.toUpperCase())) {
const key1 = keyword.slice(0, value.length)
const node1 = {
name: 'span',
attrs: { style: 'color: #26ce8a; font-size: 14px;' },
children: [{ type: 'text', text: key1 }]
}
nodes.push(node1)
const key2 = keyword.slice(value.length)
const node2 = {
name: 'span',
attrs: { style: 'color: #000000; font-size: 14px;' },
children: [{ type: 'text', text: key2 }]
}
nodes.push(node2)
} else {
const node = {
name: 'span',
attrs: { style: 'color: #000000; font-size: 14px;' },
children: [{ type: 'text', text: keyword }]
}
nodes.push(node)
}
return nodes
}
js中调用例子
const suggestSongs = res.result.allMatch
const suggestKeywords = suggestSongs.map((item) => item.keyword)
const suggestSongsNodes = []
for (const keyword of suggestKeywords) {
const nodes = stringToNodes(keyword, searchValue)
suggestSongsNodes.push(nodes)
}
this.setData({ suggestSongsNodes })
wxml中进行渲染
<block wx:for="{{suggestSongs}}" wx:key="keyword">
<view class="item">
<rich-text nodes="{{suggestSongsNodes[index]}}"></rich-text>
</view>
</block>