Github: https://github.com/fenivana/w...css
微信小程序渲染htmlhtml
大部分的普通HTML標籤(未所有測試)node
<img>
, <video>
, <audio>
git
<table>
, <tr>
, <th>
, <td>
等表格標籤github
<a>
標籤轉<navigator>
npm
HTML entities小程序
七牛圖片裁剪微信小程序
自定義插件微信
不支持<form>
, <input>
, <select>
等表單元素.數據結構
請參考pages/index
目錄裏的文件.
html-view
目錄到你的項目.// 引入HtmlParser const HtmlParser = require('../../html-view/index') // ... // 解析HTML字符串 const html = new HtmlParser('<p>hello world</p>').nodes this.setData({ html })
<import src="../../html-view/index.wxml" /> <template is="html-view" data="{{data: html}}" />
@import "../../html-view/index.wxss";
新建一個HtmlParser實例.
實例化後經過nodes
屬性獲取解析後的對象. 數據結構請參看himalaya.
baseUrl: 將<a>
, <img>
, <video>
, <audio>
, <source>
引用的相對地址使用baseUrl
轉換爲絕對地址.
const html = new HtmlParser('<p>hello world</p>').nodes
遞歸nodes
和如下的的每一個元素使用fn
函數處理
fn
將收到3個參數:
fn(node, index, array)
遞歸nodes
和如下的的每一個元素使用fn
函數過濾. 若是fn
返回true
, 則保留該元素, 不然刪除該元素. fn
收到的參數同htmlParser.each()
遞歸nodes
和如下的的每一個元素使用fn
函數處理. fn
須要返回一個新的元素結構, fn
收到的參數同htmlParser.each()
qiniuImg(domain, quality)
<img>
地址的域名若是包含domain
而且沒有query string, 則在後面加上imageView2參數: ?imageView2/2/w/WIDTH/q/QUALITY
.
WIDTH爲手機實際像素寬度 (pixelRatio * windowWidth).
QUALITY爲傳入的quality
, 若是不傳quality
, 這部分則省略.
const qiniuImg = require('../../html-view/each/qiniuImg') const html = new HtmlParser(htmlString).each(qiniuImg('qnssl.com')).nodes
<a>
標籤轉<navigator>
resolveAnchor(domain, routes)
domain: <a>
指向的URL必須是該domain, 纔會執行轉換
routes: 將URL的pathname使用routes匹配, 找到匹配的路由則執行轉換.
routes的定義請前往Router.
route.params
和route.options
會被合併到URL的query string中, 合併/覆蓋規則: Object.assign(route.query, route.params, route.options)
const resolveAnchor = require('../../html-view/each/resolveAnchor') const html = new HtmlParser(htmlString).each(resolveAnchor('www.example.com', [ // ['/pathname/of/url', '/pages/path/of/local/page/index'] ['/foo', '/pages/foo/index'], ['/bar/:id', '/pages/bar/index'] ])).nodes
因爲小程序的template不支持遞歸調用(哈哈什麼鬼~), 修改wxml模板請修改build/template.wxml
文件, 而後執行npm run build-template
生成html-view/nodes.wxml
文件