用过小程序rict-text 的帅哥靓女们(说的就是正在看文章的你)都知道,rich-text 是无法解析富文本中的video 标签的,本文教你如何优雅 的在不使用插件 的情况下完整的渲染富文本
首先是富文本图片自适应的问题
当我们从后端拿到富文本数据时,我们利用replace 方法去修改图片的样式,保证图片与手机宽度保持一致
content = content.replace(/<img/gi, '<img style="max-width:100%;height:auto"')
如果富文本出现莫名的空白区域,可能是富文本中包含有换行标签,我们就将<br> 标签替换掉
dealRichText(richtext) {
let content = '';
content = richtext.replace(/<img/gi, '<img style="max-width:100%;height:auto"')
.replace(/<br\/>/g, '');
return content
},
然后我们来处理富文本中的视频问题
既然小程序的rict-text 不能渲染视频,那我们不妨就将富文本切割成 部分富文本和视频相间隔的数组(有点拗口了昂),话不多上,给各位客官上才艺
dealVideo(richtext){
let contentArr = richtext.replace(/<img/gi, '<img style="max-width:100%;height:auto"')
contentArr = richtext.split(/<video [^>]*src=['"]([^'"]+)[^>]*><\/video>/)
return contentArr
}
不想看代码的客观可以直接复制代码使用!
代码中的contentArr 就是富文本和视频相间隔的数组,偶数为视频链接地址,奇数为富文本,利用循环渲染出来(这里用的是uniapp来写得,用原生也是一样的思路,写法不一样)
<view v-for="(item,index) in contentArr">
<rich-text :nodes="item" v-if="index%2==0||index==0"></rich-text>
<video :src="item" v-if="index%2==1" style="width: 100%;" controls></video>
</view>
那为啥不使用插件呢,原因很简单,市面上一大堆的插件,实在是懒得看了,寻思着咱又不是写不出来,就是没人家完美罢了!
至于还不熟replace 的小伙伴建议阅读一下文档 replace文档
|