uni-app怎么实现类似微博的超链接解析 uni-app富文本高亮点击【实战】

夜明小哥_1100

夜明小哥_1100

2026-03-30

880人浏览

原创

需先解析文本将@、#、URL转为带data-type/data-value的标签,再v-html渲染,最后父容器事件委托监听;微信小程序须用rich-text nodes数组替代。

uni-app怎么实现类似微博的超链接解析 uni-app富文本高亮点击【实战】

uni-app里怎么用v-html安全渲染带链接的富文本

直接用v-html会丢掉点击事件,也拦不住XSS——微博那种「@张三」「#话题#」「http://xxx」自动变可点击链接的需求,光靠v-html做不到。

得先解析原始文本,把匹配到的链接、@、#替换成带data-type和data-value的标签,再用v-html渲染,最后在父容器上委托监听click事件。

  • 别用正则全局替换后直接塞v-html——没加target="_blank"或rel="noopener"容易被利用
  • 匹配http(s)://时注意末尾标点(如句号、逗号),否则「详见:https://a.com。」会把句号包进href
  • 微信小程序不支持v-html,必须走rich-text组件,但rich-text不支持自定义data-*属性,得改用nodes数组方式构造节点

正则怎么写才不漏不炸:@、#、URL三类匹配要点

三类目标要分开处理,顺序不能错:先匹配URL(最复杂),再@用户名,最后#话题#。否则「@https://a.com」会被误判成@号。

  • URL推荐用:/(https?://[^s"{}|\^`[]]+)/g——比S+更稳,避开HTML敏感字符
  • @用户名:/@([a-zA-Z0-9_u4e00-u9fa5]{1,15})/g,限制中文+英文+数字+下划线,长度别超15,防恶意长字符串
  • #话题#:/#([^# u2028u2029]+?)#/g,非贪婪匹配,排除换行和Unicode分隔符

示例替换逻辑(仅核心):

text.replace(urlReg, '<a href="%241" data-type="url" data-value="$1">$1</a>')

点击事件怎么绑定才跨端有效

不能给每个单独绑——动态生成的DOM,且小程序里v-html根本不会触发事件。

  • 统一在富文本容器上用tap(小程序)或click(H5)监听,然后用e.target.dataset.type判断类型
  • H5需加preventDefault()避免跳转干扰;小程序里rich-text的nodes方式要用bindtap,且data-*属性必须写成data-type格式,不能驼峰
  • 注意iOS WebView中click有300ms延迟,建议用touchstart代替,但得自己做防重复触发

小程序rich-text下怎么让链接可点又不跳转

rich-text不执行JS,也不认data-*,只能靠nodes数组里的attrs传参,再在bindtap里取e.detail.tapIndex反查节点。

  • 解析完文本后,不要拼HTML字符串,改用nodes: [{ name: 'a', attrs: { 'data-type': 'at', 'data-value': '张三' }, children: [...] }]
  • 点击时通过e.detail.nodes[e.detail.tapIndex]拿到对应节点,读attrs['data-type']和attrs['data-value']
  • 别忘了给a节点加style="color: #007AFF; text-decoration: underline;",否则默认是黑字无下划线,用户看不出是链接

真正麻烦的是三端行为不一致:H5能直接window.open,App需uni.openWebview,小程序得uni.navigateTo或uni.previewMedia——路由逻辑得按uni.getSystemInfoSync().platform拆开写。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2803

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6103

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7030

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6818

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

963

5

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2235

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3602

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1196

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4139

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习