您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 微信小程序中rich-text组件在富文本解析器如何用
## 一、rich-text组件基础介绍
微信小程序的`rich-text`组件是用于渲染富文本内容的核心组件,能够解析包含HTML节点的字符串并渲染为小程序视图。与Web环境的`innerHTML`不同,它通过安全过滤机制保障内容安全性。
### 1.1 基本属性
```javascript
<rich-text nodes="{{htmlContent}}" />
nodes
:必填属性,接收字符串或对象数组space
:可选,处理连续空格(支持ensp
/emsp
/nbsp
)类型 | 说明 | 示例 |
---|---|---|
文本节点 | 纯文本内容 | "Hello World" |
元素节点 | 类似HTML标签 | <div class="box"></div> |
图片节点 | 需配置wx:for 循环处理 |
<img src="..."> |
Page({
data: {
htmlContent: `
<div style="color:red;">
<p>安全解析示例</p>
<img src="https://example.com/1.jpg" />
</div>
`
}
})
优点:无需额外依赖,性能最佳
缺点:不支持所有HTML标签(如iframe)
推荐使用wxParse
或mp-html
:
npm install mp-html
import mpHtml from 'mp-html'
Component({
properties: { content: String },
ready() {
this.setData({ nodes: mpHtml(this.data.content) })
}
})
优势: - 支持表格、视频等复杂内容 - 提供图片预览等扩展功能
// 处理API返回的富文本
function processHTML(html) {
return html.replace(/<img/g, '<img style="max-width:100%"')
}
trusted-domains
白名单校验图片链接onerror
等危险属性<rich-text
nodes="{{nodes}}"
lazy-load
binderror="imgError"
/>
现象:外部CSS类不生效
解决:使用内联样式或通过nodes
对象传样式对象
nodes: [{
name: 'div',
attrs: { style: 'color: #f00;' }
}]
/* app.wxss */
rich-text img {
max-width: 100%;
height: auto !important;
}
通过data-*
属性实现:
nodes: [{
name: 'span',
attrs: { 'data-id': '123' },
children: [{ type: 'text', text: '可点击文本' }]
}]
Page({ handleTap(e) { console.log(e.currentTarget.dataset.id) } })
<view wx:for="{{compoundNodes}}">
<template wx:if="{{item.type==='text'}}">
<text>{{item.content}}</text>
</template>
<template wx:else>
<rich-text nodes="{{item.nodes}}" />
</template>
</view>
通过slot
实现富文本插槽:
Component({
options: {
multipleSlots: true
},
properties: {
nodes: Array
}
})
rich-text
mp-html
等成熟方案virtual-list
优化最佳实践示例:
// 安全解析流程
async function loadSafeContent() {
const res = await getHTMLFromAPI()
const sanitized = sanitizeHTML(res.content) // 使用DOMPurify等库
this.setData({
nodes: mpHtml(sanitized, {
domainWhitelist: ['trusted.com']
})
})
}
通过合理运用rich-text
组件,开发者可以在保证安全性的前提下,实现媲美Web端的富文本展示效果。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。