csonchen / wxParse

微信小程序富文本解析
https://csonchen.github.io/wxParse/
MIT License
274 stars 41 forks source link
highlight html-parser rich-text webview wxparse

wxParse —— 微信小程序富文本解析

原因

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

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

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

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

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

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

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

功能标签

目前该项目已经可以支持以下标签的渲染:

使用

1. 原生组件使用方法

{
  "usingComponents": {
    "wxParse": "/components/wxParse/wxParse"
  }
}
<wxParse nodes="{{ htmlText }}" />

2. npm组件使用方法

npm install --save wx-minicomponent
{
  "usingComponents": {
    "wxParse": "/miniprogram_npm/wx-minicomponent/wxParse"
  }
}
<wxParse nodes="{{ htmlText }}" />

组件扩展

基础的富文本组件只支持基础的标签解析,出于小程序包体积考虑,读者可以根据需要按需引入组件,打包构建。

名称 功能 构建命令
wxAudio 音频播放器 npm run pack:wxAudio
highLight 代码块高亮显示 npm run pack:highLight

使用方法:

  1. 需要引入音频播放器组件,执行命令:
npm run pack:wxAudio
  1. 执行构建压缩命令,打包到 dist 目录下:
npm run build
  1. 将dist目录下的wxParse目录wxAudio目录克隆到你的项目组件目录,正常引入wxParse组件即可。

参数文档

wxParse:富文本解析组件

参数 说明 类型 例子
nodes 富文本字符 String "\<div>test\</div>"
language 语言 String 可选:"html" | "markdown" ("md")

标签使用说明补充:

  1. a 标签的内外链跳转根据的是 http 字符判断;

  2. a 标签的跳转顺序为:

webview页面配置:

  1. 原生webview页面配置:
// app.json
{
  "pages" [
    "components/wxParse/webviewPage/webviewPage"
  ]
}
  1. npm 包webview配置:
// app.json
{
  "pages" [
    "miniprogram_npm/wx-minicomponent/wxParse/webviewPage/webviewPage"
  ]
}
  1. code 标签代码高亮:
<pre>
<code lang="javascript">
  const name = 'csonchen'
</code>
</pre>

受信任的节点

节点 例子
audio \<audio title="我是标题" desc="我是小标题" src="https://media.lycheer.net/lecture/25840237/5026279_1509614610000.mp3?0.1" />
a \ 跳转到百度 \
\ 站内跳转 \
code \ const name = "csonchen"; <\/code>
p
div
span
li
ul
ol
img
button
hr
h1
h2
h3
h4
table
tr
th
td
....

highLight:代码高亮解析组件

参数 说明 类型 例子
codeText 原始高亮代码字符 String "var num = 10;"
language 代码语言类型 String 可选值:"javascript/typescript/css/xml/sql/markdown/c++/c"

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

wxAudio:仿微信公众号文章音频播放组件

参数 说明 类型 例子
title 标题 String "test"
desc 副标题 String "sub test"
src 音频地址 String

示例展示

  1. 富文本解析
  1. 代码高亮(highLight组件)

更新历史

TODO