小程序rich-text使用

今天在做小程序一个搜索页面,对输入的内容匹配到相应的地点,并且要高亮搜索内容

就上面这种,看到这个想了一下,这个简单

思路就是:拿到着总字符串和查询字符串,然后根据查询字符串把文案切出来,再根据字符串索引判断将查询字符串插入到数组对应位置中,最后遍历数组展示,当与查询字符串相同时加上高亮class 

看着没啥问题,实现起来还是挺复杂的,然后也觉得很low,一直处理字符串,正觉得苦恼不想写就问了旁边ios原生怎么实现,原生伙伴说他们有富文本,然后索引定位,实现起来很简单,但是我没用过,想着前端好像没这个,然后扫了一下小程序文档,发现了一个rich-text就是富文本,瞬间就兴奋了

修改思路为:直接用正则对总字符串全局替换查询字符串,并替换的内容为一个加了高亮class的元素

实现过程:建一个wxs文件,代码如下

var filterTxt = function (totalStr, choosedStr) {

if(typeof totalStr == 'string' && typeof choosedStr == 'string' && totalStr && choosedStr) {

var reg = getRegExp(choosedStr, "g")

return totalStr.replace(reg, '<span class="search_active">' + choosedStr + '</span>')

}

return totalStr

}

module.exports = {

filterTxt: filterTxt

}

然后在页面上直接注册一下这个wxs文件,调用即可

<rich-text nodes='{{tools.filterTxt(item.chainName, inpStr)}}'></rich-text>

其中rich-text可以去看下官方文档,nodes就是渲染的节点,支持Array和String,推荐使用Array,我们这里只能使用String好处理点,最后效果就这么简单的完成了

其中注意点:1.正则有变量的时候不能直接 /变量/g这种方式匹配,这样不会识别变量会当成普通的字符串进行匹配,正常h5中是

new RegExp(变量,‘img’)这种,但是在小程序wxs文件中又不支持这种(文档没看仔细,调试了好一会),要使用getRegExp(变量, 'img')这种方式形成正则匹配规则

2.rich-text里面的nodes使用字符串插入节点标签的时候,要用html标签,我开始一直使用小程序的标签text导致一直被过滤了,苦恼了一下,后来看官方文档发现这样一句话:“如果使用了不受信任的HTML节点,该节点及其所有子节点将会被移除。”尝试了一下span标签,没想到成功了,所以记录下来,防止大家入坑

最后说一句:多看官方文档,谢谢大家

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值