const Audio = require('./Audio'), tagsAndAttrs = require('./tagsAndAttrs'); class ToJson { constructor(html,app){ const _ts = this; let m = _ts.m = {}; m.parse = require('./parse5'); _ts.html = html; _ts.data = {}; _ts.app = app; // 得到整体页面的数据 _ts.data.document = m.parse.parse(_ts.html); // 得到body部分的数据 _ts.data.body = _ts.getBodyData(_ts.data.document); // 生成当前的数据ID _ts.id = `dataId_${+new Date}_${(Math.random()+'').slice(2)}`; // 将数据保存到全局 global.__towxmldata__ = global.__towxmldata__ || {}; global.__towxmldata__[_ts.id] = global.__towxmldata__[_ts.id] || {}; global.__towxmldata__[_ts.id].audio = {}; } getData(){ const _ts = this, m = _ts.m; let data = _ts.data, outData = _ts.sortOut(data.body); outData.node = 'root'; // 为数据添加ID outData.id = _ts.id; global.__towxmldata__[_ts.id].article = outData; return global.__towxmldata__[_ts.id].article; } /** * 遍历页面数据整理成小程序想要的 */ sortOut(bodyData){ const _ts = this, app = _ts.app, appData = app.data ; let result = {}, arrange; (arrange = (data,result)=>{ // 当有数据且有子元素时则遍历 if(data && data.childNodes && data.childNodes.length){ // 子元素数据不存在时,创建一个空的数组用以存储子元素数据 if(!result.child){ result.child = []; }; // 遍历子节点,处理节点的数据 for(let i=0,len=data.childNodes.length; i{ let option = {}, nodeAttrs = node.attrs; for(let i=0,len=nodeAttrs.length; i{ for(let i=0,len=list.length; i { data[item] = 'text'; }); // 该系列是小程序原生tag,不需要转换 tagsAndAttrs.wxml.forEach(item => { data[item] = item; }); return data; } }; module.exports = ToJson;