更新记录

1.0.1(2026-09-10) 下载此版本

  • 新增图片点击预览,自动收集富文本中全部图片并定位到当前图片
  • 新增链接点击打开,H5 新窗口打开,App 使用内置浏览器打开
  • 新增 previewImageopenLink 属性,可分别关闭图片预览和打开链接
  • 支付宝小程序通过 marks 识别 imga 节点,支持点击预览图片

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
  • 支付宝小程序通过 @clickevent.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 的标签会写入对应内联样式,该配置会与默认值合并,可用于任意标签
  • 支付宝小程序下,aimg 会写入 marks,可在 tap / longTapevent.detail.marks 中读取

支付宝小程序 marks

标签 marks
a { name: 'a', href }
img { name: 'img', src }

示例:

  • <p class="intro">你好</p>intro rich-p
  • formatRichText(html, { prefix: 'custom' }) 时,prich-p custom-p
  • formatRichText(html, { prefix: 'rich' }) 时,p 只有 rich-p
  • 传入 custom 时,表格容器 class 为 rich-table-container custom-table-container

parseHtml(html)

将 HTML 字符串解析为 rich-text 节点数组。formatRichText 内部会按需调用,一般无需单独使用。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。