function parseSchema (schema) {
let html = ''
if (isJSON(schema)) {
// 如果是JSON类型,就直接用tag类型解析
html = parseTag(schema)
} else if (isArray(schema)) {
// 如果是JSON类型,就直接用tag上下文类型解析
html = parseContent(schema)
}
return html
}
解析tag类型
function parseTag (schema) {
let html = ''
if (isJSON(schema) !== true) {
return html
}
let tag = schema.tag || 'div'
const content = schema.content
// 检查是否为合法的tag, 如果不是,默认为div
if (tags.legalTags.indexOf(tag) < 0) {
tag = 'div'
}
const attrStr = parseAttribute(schema.attribute)
// 判断是否为闭合tag
if (tags.notClosingTags[tag] === true) {
// 如果是闭合的tag
html = `<${tag} ${attrStr} />`
} else {
// 如果是非闭合tag
html = `<${tag} ${attrStr} >${parseContent(content)}</${tag}>`
}
return html
}
解析tag内容
// 内容的类型为 Array
// Array的内容为字符串,或者tag类型的JSON
function parseContent (content) {
let html = ''
if (isArray(content) !== true) {
return html
}
for (let i = 0; i < content.length; i++) {
const item = content[i]
if (isJSON(item) === true) {
html += parseTag(item)
} else if (isString(item)) {
html += item
}
}
return html
}
前言
html-schema-parser
,可以直接安装使用。具体的渲染设想如下:
HTML的基本要素
如果要实现以上解析功能,就先抽象出前端、后端的HTML渲染的元素。
tag
attribute
content
Schema解析实现
设定tag
解析tag的schema
解析schema入口
解析tag类型
解析tag内容
参考
https://github.com/caolan/pithy