评论

小程序富文本解析

小程序富文本解析,代码高亮

wxParse

微信小程序富文本解析

原因

由于原作者仓库 wxParse 不再维护,我们项目中商品信息展示又是以wxParse这个用做富文本解析的;

于是乎,决定采用 递归Component 的方式对其进行重构一番;

原项目使用的 template 模板的方式渲染节点,存在以下问题:

  1. 节点渲染支持到12层,超出会原样输出 html 代码;

  2. 每一层级的循环模板都重复了一遍所有的可解析标签,代码十分臃肿。

  3. li标签不支持 ol 有序列表渲染(统一采用的是 ul 无序列表),a标签无法实现跳转,也无法获取点击事件回调等等;

  4. 节点渲染没有绑定 key 值,一是在开发工具看到一堆的 warning信息(看着十分难受),二是节点频繁删除添加,无法比较key值,造成 dom 节点频繁操作。

功能标签

  1. 目前该项目已经可以支持以下标签的渲染:
  1. 支持 npm包 引入
npm install --save wx-minicomponent

使用

  1. 原生组件使用方法
  • 克隆 项目 代码,把 components目录 拷贝到你的小程序根目录下面;

  • 在你的 page页面 对应的 json 文件引入 wxParse 组件

{
  "usingComponents": {
    "wxParse": "/components/wxParse/wxParse"
  }
}
  • 组件调用
<wxParse nodes="{{ htmlText }}" />
  1. npm组件使用方法
  • 安装组件
npm install --save wx-minicomponent
  • 小程序开发工具的 工具 栏找到 构建npm,点击构建;

  • 在页面的 json 配置文件中添加 wxParse 自定义组件的配置

{
  "usingComponents": {
    "wxParse": "/miniprogram_npm/wx-minicomponent/wxParse"
  }
}
  • wxml 文件中引用 wxParse
<wxParse nodes="{{ htmlText }}" />

提示:详细步骤可以参考小程序的npm使用文档

  1. 补充组件:代码高亮展示组件使用
  • pagejson 文件里面引入 highLight 组件

原生引入:

{
  "usingComponents": {
    "highLight": "/components/highLight/highLight"
  }
}

npm组件引入:

{
  "usingComponents": {
    "highLight": "/miniprogram_npm/wx-minicomponent/highLight"
  }
}
  • 组件调用
<highLight codeText="{{codeText}}" />

参数文档

  • wxParse:富文本解析组件
参数 说明 类型 例子
nodes 富文本字符 String “<div>test</div>”
language 语言 String 可选:“html” | “markdown” (“md”)

受信任的节点

节点 例子
audio <audio title=“我是标题” desc=“我是小标题” src=“https://media.lycheer.net/lecture/25840237/5026279_1509614610000.mp3?0.1” />
a <a href=“www.baidu.com”>跳转到百度</a>
p
div
span
li
ul
ol
img
button
h1
h2
h3
h4
  • highLight:代码高亮解析组件
参数 说明 类型 例子
codeText 原始高亮代码字符 String “var num = 10;”
language 代码语言类型 String 可选值:“javascript/typescript/css/xml/sql/markdown”

提示:如果是html语言,language的值为xml

  • wxAudio:仿微信公众号文章音频播放组件
参数 说明 类型 例子
title 标题 String “test”
desc 副标题 String “sub test”
src 音频地址 String

示例展示

  1. 富文本解析
  • html文本解析实例

  • markdown文本解析实例

  1. 代码高亮

更新历史

  • 2020-5-31
  1. 迁移utils目录到wxParse目录下;
  2. 富文本增加markdown文本解析支持;
  • 2020-5-21: 富文本组件image标签添加loading过渡态,优化图片加载体验

  • 2020-5-17: 完善组件参数文档,增加wxParse对audio标签标题,副标题的解析功能

  • 2020-5-13: 增加css,html,ts,sql,markdown代码高亮提示支持

  • 2020-5-6: 增加图片预览功能

项目地址

项目地址:https://github.com/csonchen/wxParse

最后一次编辑于  2020-06-01  
点赞 13
收藏
评论

21 个评论

  • m
    m
    2021-01-12

    大佬不支持简析空格吗?

    2021-01-12
    赞同
    回复 1
    • Sam
      Sam
      2021-01-12
      支持的呀,你可以把issue那里把有问题的html文本发出来,我来看一下
      2021-01-12
      回复
  • 幸福里(鲜花,结婚用品,录像)
    幸福里(鲜花,结婚用品,录像)
    2020-11-21

    请问换行支持吗

    2020-11-21
    赞同
    回复 1
    • Sam
      Sam
      2020-11-24
      支持的
      2020-11-24
      回复
  • 阿白
    阿白
    2020-09-29

    在swiper组件中,多个swiper-item,每个swiper-item下都有多张图片,点击图片预览时,始终显示的是第一个swiper-item中的第一张图片

    2020-09-29
    赞同
    回复 8
    • Sam
      Sam
      2020-09-29
      swiper组件中,你的富文本标签有swiper??
      2020-09-29
      回复
    • 星
      2020-12-21回复Sam
      富文本里用轮播图挺强
      2020-12-21
      回复
    • Sam
      Sam
      2020-12-24回复
      印象中我并没有实现轮播图的功能,得看应用场景,可以的话,你提供一下应用场景给我,我想想办法去实现
      2020-12-24
      回复
    • 阿白
      阿白
      2020-12-30回复Sam
      不是,是swiper-item中放富文本
      2020-12-30
      回复
    • Sam
      Sam
      2021-01-05回复阿白
      能否提供一下完整的html富文本字符串给我
      2021-01-05
      回复
    查看更多(3)
  • Mr.Dolphin
    Mr.Dolphin
    2020-08-05

    你好,感谢分享,目前使用出现一个问题,a标签可以渲染出来,但是点击无法跳转,我又用了官方提供的富文本好像也是跳转不了。

    2020-08-05
    赞同
    回复 6
    • Sam
      Sam
      2020-08-05
      目前需要在页面里面加个handleTagATap 事件就可以拿到点击事件了,我现在完善一下跳转的功能,下午发个版,多谢支持
      2020-08-05
      1
      回复
    • Mr.Dolphin
      Mr.Dolphin
      2020-08-05回复Sam
      好的 ,感谢大佬,另外还有个问题,ios手机存在视频无法播放
      2020-08-05
      回复
    • Sam
      Sam
      2020-08-05回复Mr.Dolphin
      可以提供提供html片段吗,video用的还是原库的原生自带的,还没时间去自己造一个
      2020-08-05
      回复
    • Mr.Dolphin
      Mr.Dolphin
      2020-08-05回复Sam
      2020-08-05
      回复
    • Sam
      Sam
      2020-08-05回复Mr.Dolphin
      原生的已经可以直接使用了,你可以本地替换一下;npm的包我还发不上去,要过一会
      2020-08-05
      回复
    查看更多(1)
  • cici
    cici
    2020-07-06

    为啥子我在页面上渲染不出来??

    2020-07-06
    赞同
    回复 1
    • Sam
      Sam
      2020-07-07
      麻烦请提供一下代码片段链接,谢谢
      2020-07-07
      回复
  • Rick
    Rick
    2020-05-29

    我之前用的是wxparse,请问,你这个解析的是不是在原先的那个基础上进行了升级?说得简单点就是,解析的更全面了,不知道这么理解对不对

    2020-05-29
    赞同
    回复 2
    • Sam
      Sam
      2020-05-29
      是的,我在原来templage的实现重构为了Component,并且处理warning报错,新增了一些html标签展示
      2020-05-29
      回复
    • Rick
      Rick
      2020-05-29回复Sam
      感谢感谢!!!
      2020-05-29
      回复
  • Rick
    Rick
    2020-05-28

    可以商用吗请问

    2020-05-28
    赞同
    回复 2
    • Sam
      Sam
      2020-05-28
      可以的
      2020-05-28
      回复
    • Rick
      Rick
      2020-05-28回复Sam
      谢谢!
      2020-05-28
      回复
  • ^
    ^
    2020-05-15

    音频可以正常播放吗?这边一直报Cannot read property 'play' of undefined

    2020-05-15
    赞同
    回复 4
    • Sam
      Sam
      2020-05-15
      我写的代码范例是可以用的,你这边不可以?
      2020-05-15
      回复
    • ^
      ^
      2020-05-15回复Sam
      解决了,是后台数据的问题,可以再问一下Audio的title和desc是怎么设置的吗?
      2020-05-15
      回复
    • Sam
      Sam
      2020-05-17回复^
      我今天写一下组件的说明文档,你关注一下我的仓库
      2020-05-17
      回复
    • ^
      ^
      2020-05-17回复Sam
      好的,谢谢~
      2020-05-17
      回复
  • TNT
    TNT
    2020-04-28

    = =不是升级为wxParser了么

    2020-04-28
    赞同
    回复 2
    • Sam
      Sam
      2020-04-28
      看了下那个库的实现,还是html的模板标签的解析还是重复写了10几遍,我们这边需要扩展的里面的实现,发现比较麻烦,所以我重新改了一下
      2020-04-28
      回复
    • TNT
      TNT
      2020-04-28回复Sam
      我们用的Parser
      2020-04-28
      回复
  • 凉茶酱肘子
    凉茶酱肘子
    2020-04-23

    大佬,有个问题请教你,关于富文本解析的。

    假设用来循环渲染页面的数组,它的每一项的数据格式如下:

    {

    text: '<p>这是一段html代码</p><image src=""></image>',

    id: 112,

    flag: true,

    ......

    }

    每一项中都有一个字段的值是一段HTML代码,如果需要将这一个数组的数据全部同时渲染进页面,那么该怎么写啊?因为以前做的都是每一个页面单独解析一个或者特定几个富文本,所以遇上需要循环解析的数组,就不知道该怎么办了。恳请大佬指点


    2020-04-23
    赞同
    回复 11
    • Sam
      Sam
      2020-04-23
      应该不难的呀,按照你的意思,无非就是将单一的富文本字段放在数组对象的某个属性,按照我的组件调用,无非就是循坏调用即可,代码如下
      2020-04-23
      回复
    • 凉茶酱肘子
      凉茶酱肘子
      2020-04-23回复Sam
      emmmm,我先试试,顺便理理逻辑,感觉刚才好像没说明白
      2020-04-23
      回复
    • 凉茶酱肘子
      凉茶酱肘子
      2020-04-23回复Sam
      我项目里有wxParse,也一直是用这个在做富文本解析,但是用你的方法在页面的json文件中引用的时候一直报错,这是什么问题啊
      2020-04-23
      回复
    • 凉茶酱肘子
      凉茶酱肘子
      2020-04-23回复Sam
      能给一个示例小程序瞅瞅吗,大佬
      2020-04-23
      回复
    • Sam
      Sam
      2020-04-23回复凉茶酱肘子
      你可以提交一个代码片段嘛
      2020-04-23
      回复
    查看更多(6)

正在加载...

登录 后发表内容