详解小程序rich-text对富文本支持方案


Posted in Javascript onNovember 28, 2018

小程序富文本解析

目前小程序使用比较多的富文本方案一个是小程序自带的rich-text组件,一个是wxPrase。

wxPrase原理是把原有的html标签全部解析成小程序的组件,这样无论事件可控以及扩展性都是比较好的,但是对于行内渲染和多重渲染方面表现不是很好。

微信自带的rich-text组件刚好补足了wxPrase行内渲染和多重渲染方面表现方面的缺点,但是对于一些自定义的标签支持度不高并且会屏蔽元素所有事件,虽然支持直接解析html字符串,但是性能没有直接绑定json串好。

官网给的rich-text演示demo:

<rich-text nodes="{{nodes}}"></rich-text>
Page({
 data: {
  nodes: [{
   name: 'div',
   attrs: {
    class: 'div_class',
    style: 'line-height: 60px; color: red;'
   },
   children: [{
    type: 'text',
    text: 'Hello World!'
   }]
  }]
 },
 tap() {
  console.log('tap')
 }
})

rich-text-parser是一个能将html字符串转成rich-text组件可以解析的json格式,并且可以自定义扩展标签,并且支持修改rich-text组件内部html样式(包括img标签)。

使用方法:

npm i rich-text-parser -S --production
<rich-text nodes="{{html2}}"></rich-text>
import parser from 'rich-text-parser'

Page({
 data: {
    html: `<p>文殊林舍、山房由丽江铂尔曼度假酒店余明金老师设计,是<b>丽江古城的网红民宿</b>,2017年被评为<b>全国100家“最美民宿”</b>,以及2017年<b>最值得睡的“365张床”</b>。</p>
  <p><br></p>
  <p>两家店均位于古城北门坡半山处,背倚青山,<b>可俯瞰古城全景。</b></p>
  <p><br></p>
  <p>文殊·林舍2间房、文殊·山房6间房,共8间房。有可看丽江古城全景的景观房,有落满阳光的大床房,有花园院景的复式房...</p>
  <p><br></p>
  <p>房间<b>按照五星级标准配套</b>,科勒卫浴、鹅绒被、品牌乳胶床垫、高端洗漱用品等,提供免费洗衣机、烘干机、自助厨房等配套服务。</p>
  <p><br></p>
  <p>每个房间距离适中,为所有入住房客营造更私密舒适的空间体验感!另房东可以提供一对一的管家服务,接受所有房客吃喝玩乐咨询以及打折的各种便利活动!</p>
  <p><br></p>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1glier2lsdge1q9irbs1a5u4e.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红民宿大床房</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1glp4b1sml12641ma3b96pnv4j.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红民宿大床房</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1glu4p1q2s1hpm4qu127dhj4o.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红双床房</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gmav71q0b182r1nd7184ufns4t.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红大床房(可观古城全景)</h6>
      </figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gmg28udvhec1s4r1cvl1m2s52.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红大床房(可观古城全景)</h6>
      </figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gmkvj1egf1254le7157quqj57.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红复式星空房(可观古城全景)</h6>
      </figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gmuhq161sf621hu81l7slc85c.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红民宿别墅东院</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gngk76441747omu1on619085h.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>餐厅</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gnlm21gi916okcnf12mp1fh05m.jpg" rate="0.67">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>公共区域</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1go50bftu15c41rbgdoj1e4p5r.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>公共区域</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gonmohor1duu1grv5gd8fu60.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明">公共区域-露台</figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1goslosu2qnn4tn1bdjus965.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红民宿汤池别墅西院</h6></figcaption>
    </figure>
  </div>
  <div class="kai-images">
    <figure contenteditable="false"><img src="http://images.kaishiba.com/o_1cs1gphvmfrgk2momcgko21g6a.jpg" rate="1.50">
      <figcaption contenteditable="true" class="" data-placeholder="请输入图片说明"><h6>丽江文殊设计师网红民宿别墅东院</h6></figcaption>
    </figure>
  </div>
  <p><br></p>
  <p><b>门店信息:</b></p>
  <p>·wifi已覆盖、24小时热水、吹风机、一次性用品</p>
  <p>·电热毯、壁炉、一对一管家服务等</p>
  <p><br></p>
  <p><b>商家联系电话:</b></p>
  <p>·地址:云南省丽江市古城区北门坡玄天巷26号</p>
  <p>·电话:15099128722</p>`,
  html2: []
 },
 onLoad () {
   const {html} = this.data
   // 定义需要解析的特殊标签,value不填默认是div
   parser.definedCustomTag({figure: 'div', figcaption: ''})
   const nodes = parser.getRichTextJson(html)
   console.log(nodes)
   this.setData({
    html2: nodes.children
   })
  }
})

源码参见rich-text-parser

效果图以及数据结构:

详解小程序rich-text对富文本支持方案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
实现超用户体验 table排序javascript实现代码
Jun 22 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
利用javascript实现web页面中指定区域打印
Oct 30 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
vuejs手把手教你写一个完整的购物车实例代码
Jul 06 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
Jul 17 jQuery
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
Sep 30 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 Javascript
微信小程序实现简单评论功能
Nov 28 #Javascript
微信小程序实现省市区三级地址选择
Jun 21 #Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 #Javascript
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 #Javascript
微信小程序仿知乎实现评论留言功能
Nov 28 #Javascript
微信小程序实现评论功能
Nov 28 #Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
Nov 28 #Javascript
You might like
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
php设计模式之单例模式代码
2016/06/11 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
基于datagrid框架的查询
2013/04/08 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue组件与复用详解
2018/04/08 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
python pytest进阶之fixture详解
2019/06/27 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
NumPy排序的实现
2020/01/21 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
实习教师自我鉴定
2013/12/12 职场文书
个人现实表现材料
2014/02/04 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
平安建设实施方案
2014/03/19 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫