Taro框架开发小程序的过程中,因需展示管理系统富文本编辑返回的图片,视频,对于视频拓展美观度有一定自定义要求,调研查阅资料得出如下解决方案
import Taro from '@tarojs/taro'; import { View, Video, Image, Text } from '@tarojs/components'; import htmlParser from 'htmlparser2'; // 需要安装 htmlparser2 库 const RichTextParser = ({ htmlContent }) => { const renderContent = (content) => { const elements = []; // 解析 HTML 字符串 const parser = new htmlParser.Parser({ onopentag(name, attrs) { if (name === 'video') { elements.push( <Video key={attrs.id} src={attrs.src} style={{ margin: 0, display: 'block' }} controls /> ); } else if (name === 'img') { elements.push( <Image key={attrs.src} src={attrs.src} mode="widthFix" style={{ marginBottom: '10px' }} /> ); } else if (name === 'p') { elements.push(<View key={elements.length} style={{ marginBottom: '10px' }} />); } }, ontext(text) { if (text.trim()) { elements.push(<Text key={elements.length}>{text}</Text>); } }, }); parser.write(content); parser.end(); return elements; }; return <View>{renderContent(htmlContent)}</View>; }; export default function App() { const htmlString = ` <div class="ql-container ql-snow"> <div class="ql-editor"> <video id='video' src='dd.mp4' style='margin: 0;display: block'/> <p><img src="xxx.jpg"></p> <p>测试阿萨</p> <p><img src="xxx.jpg"></p> </div> </div> `; return ( <View> <RichTextParser htmlContent={htmlString} /> </View> ); }
通常上诉内容可以正常使用了,但是因为htmlparser2可能在装的时候版本会出现使用的问题,因此,当出现模块引入不争取的时候,可以使用如下方法
import { Parser } from 'htmlparser2'; // 注意 // new htmlParser.Parser 变更为 new Parser
本文作者:seek
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!