更新记录
1.0.1(2026-09-10) 下载此版本
- 新增图片点击预览,自动收集富文本中全部图片并定位到当前图片
- 新增链接点击打开,H5 新窗口打开,App 使用内置浏览器打开
- 新增
previewImage、openLink属性,可分别关闭图片预览和打开链接 - 支付宝小程序通过
marks识别img、a节点,支持点击预览图片
1.0.0(2026-09-09) 下载此版本
首次提交。 当前版本未处理点击事件,后续会增加事件处理
平台兼容性
uni-app(3.8.3)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | - | √ | √ | √ | - | - | - | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | - | - |
uni-app x(3.8.3)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
# oz-richText
描述
富文本展示组件。内部会将 HTML 字符串或节点数组转换为 uni-app rich-text 可用的 nodes,并为非文本节点补充样式 class。
插件符合 uni_modules 规范,导入后可通过 easycom 直接使用。
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
content |
String / Array | '' |
HTML 字符串,或已解析的节点数组 |
prefix |
String | rich |
非文本节点的 class 前缀 |
tagStyle |
Object | {} |
各标签的内联样式,会与组件内置默认值合并 |
space |
String | - | 透传给内部 rich-text,显示连续空格 |
selectable |
Boolean | true |
透传给内部 rich-text,文本是否可选 |
imageMenuPrevent |
Boolean | false |
透传给内部 rich-text,是否阻止长按图片菜单 |
preview |
Boolean | false |
透传给内部 rich-text,是否使用原生图片预览 |
userSelect |
Boolean | false |
透传给内部 rich-text,文本是否可选(部分平台) |
previewImage |
Boolean | true |
点击图片时预览富文本中的全部图片。支持 H5、App-vue、支付宝小程序 |
openLink |
Boolean | true |
点击 a 标签时打开链接。支持 H5、App-vue |
uni-app 中,自定义组件内的 rich-text 只会应用当前组件的 css,页面或外部样式无法覆盖内部节点。
事件
| 事件名 | 说明 | 平台 |
|---|---|---|
@itemclick |
节点点击,参数为原始事件 | H5、App-vue |
@click |
点击,支付宝小程序可通过 event.detail.marks 获取节点信息 |
全端 |
@touchstart |
触摸开始 | 同 rich-text |
@touchmove |
触摸移动 | 同 rich-text |
@touchcancel |
触摸取消 | 同 rich-text |
@touchend |
触摸结束 | 同 rich-text |
@longpress |
长按 | 同 rich-text |
图片预览
点击图片时,会先收集富文本中的全部图片地址,再打开图片集并定位到当前图片。
- 由
previewImage控制,默认开启 - H5、App-vue 通过
@itemclick识别img - 支付宝小程序通过
@click的event.detail.marks识别img
uni.previewImage({
current: 0, // 当前点击图片在图片集中的下标
urls: ['图片地址1', '图片地址2']
});
打开链接
点击 a 标签时,由 openLink 控制是否打开链接,默认开启。
- H5:
window.open(href, '_blank') - App:
plus.runtime.openWeb(href)
示例
<oz-richText :content="html"></oz-richText>
export default {
data() {
return {
html: '<p>你好</p><img src="https://example.com/a.png" /><a href="https://uniapp.dcloud.net.cn/">链接</a>'
};
}
};
关闭图片预览或打开链接:
<oz-richText :content="html" :previewImage="false" :openLink="false"></oz-richText>
直接使用组件时无法自定义样式,只能按照组件内部的默认样式和标签内联样式展示。
自定义样式
若要自定义样式,需要使用组件内的 formatRichText 配合原生 rich-text 标签渲染。需要默认样式时,可引入组件内的 default.scss。
<template>
<rich-text :nodes="nodes"></rich-text>
</template>
<script>
import { formatRichText } from '@/uni_modules/oz-richText/components/oz-richText/format-rich-text.js';
export default {
data() {
return {
nodes: []
};
},
onLoad() {
this.nodes = formatRichText(this.html, {
prefix: 'custom'
});
}
};
</script>
<style>
@import '@/uni_modules/oz-richText/components/oz-richText/default.scss';
/* 自定义前缀对应的样式 */
.custom-p {
font-size: 30rpx;
}
</style>
rich-text 内部节点吃不到 scoped 样式,自定义 class 需要写在未加 scoped 的 style 中。
工具方法
formatRichText(nodes, options)
import { formatRichText, parseHtml } from '@/uni_modules/oz-richText/components/oz-richText/format-rich-text.js';
const nodes = formatRichText(html, {
prefix: 'custom',
tagStyle: {
p: 'font-size:16px;line-height:1.6;',
td: 'border:1px solid #000;padding:8px;'
}
});
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
nodes |
Array / String | - | 已解析的节点数组,或 HTML 字符串 |
options |
Object | {} |
其余配置 |
options:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
prefix |
String | 'rich' |
额外的 class 前缀 |
tagStyle |
Object | 组件内置默认值 | 各标签的内联样式,与默认值合并,可用于任意标签 |
返回处理后的 nodes 数组。
处理规则:
- 传入数组时直接处理;传入 HTML 字符串时先调用
parseHtml - 跳过文本节点;元素节点默认都会追加
rich-${标签名} - 传入的
prefix与默认前缀rich不同时,再追加${prefix}-${标签名};相同时不重复添加 - 已有 class 会保留,已存在的 class 不会重复写入
- 遇到
table时外包一层div,class 规则同上,默认是rich-table-container - 匹配到
tagStyle的标签会写入对应内联样式,该配置会与默认值合并,可用于任意标签 - 支付宝小程序下,
a、img会写入marks,可在tap/longTap的event.detail.marks中读取
支付宝小程序 marks:
| 标签 | marks |
|---|---|
a |
{ name: 'a', href } |
img |
{ name: 'img', src } |
示例:
<p class="intro">你好</p>→intro rich-pformatRichText(html, { prefix: 'custom' })时,p→rich-p custom-pformatRichText(html, { prefix: 'rich' })时,p只有rich-p- 传入
custom时,表格容器 class 为rich-table-container custom-table-container
parseHtml(html)
将 HTML 字符串解析为 rich-text 节点数组。formatRichText 内部会按需调用,一般无需单独使用。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1309
赞赏 4
下载 12583239
赞赏 1949
赞赏
京公网安备:11010802035340号