最新方法可以使用微信小程序提供的 rich-text (富文本)组件直接写解析html,详见 rich-text:
<rich-text class='f13 c_9' nodes="{{html}}"></rich-text>
其中 html 为后端返回的html代码格式数据,这里直接就可以解析,再也不需要像wxParse那样还需要引入插件。
虽然官方文档说nodes不推荐使用String类型,性能会有所下降(当然了,肯定要解析代码呀),建议使用nodes类型(节点列表),就是这样的:
<rich-text nodes="{{nodes}}" bindtap="tap"></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')
}
})
最初使用wxParse就是没注意到这个组件还支持String格式数据,通篇在介绍nodes这种用法。想想这种用法实在是有点反人类(吐槽下),如果我要嵌入解析html文档,为什么还要用节点列表的形式去写呢?如果我都能写出节点列表了,为什么不直接用wxml标签写呢?解析html主要就是解析服务器获取的html数据的呀,后端服务器获取的html数据我还要转换成Nodes?凌乱中......
总之,目前我还没想到什么情况下需要使用这种方式,即使使用String类型性能会有所下降,但总比我去解析html成nodes或者使用wxParse好吧,这就足够了。
小程序默认是不支持html格式的内容显示的,那可以通过wxParse来实现。
1) 下载wxParse:https://github.com/icindy/wxParse
2) 下载完成后将插件目录下的wxParse文件夹拷贝到项目目录下
3) 在app.wxss中导入wxParse的样式表:
@import "wxParse/wxParse.wxss";
4)在需要加载html代码的页面js文件中引用wxParse.js文件:
var WxParse = require('../../../wxParse/wxParse.js');
5)通过WxParse.wxParse的方法来设置html内容:
var htmlContent= "<h2>这里是Html内容</h2>"
WxParse.wxParse('detailHtml', 'html', htmlContent, this, 0);
6) 页面中引用模板
<import src="../../../wxParse/wxParse.wxml"/>
<template is="wxParse" data="{{wxParseData:htmlContent.nodes}}"/>
关于wxParse的应用与二次开发详见:https://github.com/icindy/wxParse