小程序把字符串转html,开发"小程序"中做的一些"转换"的工作:html 转换成 wxml,html 转换成 json...

介绍

“转换” 意思是将"小程序"不支持的东西转换成它支持的东西。我在开发的小程序的过程中遇到了两种需要做“转换”的场景:

html 转换成 wxml

svg 转换成 canvas

我将在下文详细介绍我是怎么处理这两种情况的。

html 转换成 wxml

我们的产品在某些场景下,后端接口会直接传 html 字符串给前端。在 ReactJs 中,我们可以用 dangerouslySetInnerHTML 直接渲染 html 字符串(不一定安全),而 ”小程序“不支持 html ,因此必须对 html 进行处理。解决这个问题的步骤主要是:1. 将 html转换成 json ( 树结构) ;2. 将 json 转换成 wxml 。我在对问题做了调研后发现,现有一个库 wxParse 满足该转换的目的,但是在我看来,这个库做的事情太多,需要依赖文件过多,不满足只需要简单处理的需要,所以我决定自己写。

html 转换成 json

在参考了 html2json 与 himalaya 两个库的处理思路的基础上,我写了一个简单的解析库 htmlParser 。htmlParser 处理 html字符串分两步:

lexer: 生成标记(token)

function lex(html) {

let string = html

let tokens = []

while (string) {

// 先处理以 "" 开始的结束标签

if (string.indexOf("") === 0) {

const match = string.match(REGEXP.endTag)

if (!match) continue

// 通过 substring 截断这个标签的字符串长度

string = string.substring(match[0].length)

tokens.push({

tag: match[1],

type: 'tag-end',

})

continue

}

// 处理以 "

if (string.indexOf("

const match = string.match(REGEXP.startTag)

if (!match) continue

string = string.substring(match[0].length)

const tag = match[1]

const isEmpty = !!MAKER.empty[tag]

const type = isEmpty ? 'tag-empty' : 'tag-start'

const attributes = getAttributes(match[2])

tokens.push({

tag,

type,

attributes

})

continue

}

// 每个处理过程的其他部分字符串被当做 "text" 文本处理(暂时不处理其他情况)

const index = string.indexOf('

const text = index < 0 ? string : string.substring(0, index)

string = index < 0 ? "" : string.substring(index)

tokens.push({

type: "text",

text

})

}

return tokens

}

parser: 根据标记生成树

上面的 lexer 将 html 字符串分隔成了一个一个 token,然后,我们通过遍历所有的标识来构建树

function parse(tokens) {

let root = {

tag: "root",

children: []

}

let tagArray = [root]

tagArray.last = () => tagArray[tagArray.length - 1]

for (var i = 0; i < tokens.length; i++) {

const token = tokens[i]

if (token.type === 'tag-start') {

// 构建节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在微信小程序,可以使用split方法将字符串转换为数组。这种方法可以通过指定分隔符来确定字符串的分割方式。例如,可以使用逗号作为分隔符将字符串分割为数组元素。以下是一个示例代码: ```javascript var strOne = "CoderZb,iOS开发,小程序开发"; var arryOne = strOne.split(","); // 将字符串按逗号分割成数组 console.log(arryOne); ``` 通过执行上述代码,字符串"CoderZb,iOS开发,小程序开发"将被分割成一个包含三个元素的数组,分别是"CoderZb"、"iOS开发"和"小程序开发"。数组的结果将打印在控制台上。 同样地,可以使用join方法将数组转换字符串。在此方法,可以指定一个连接符来确定数组元素之间的连接方式。以下是一个示例代码: ```javascript var ojbA = ["age", 1993, 3, 12]; var objB = ojbA.join("~"); // 按照~字符串 console.log(objB); ``` 通过执行上述代码,数组["age", 1993, 3, 12]将被转换成字符串"age~1993~3~12"。字符串的结果将打印在控制台上。 希望以上内容能够帮助您理解微信小程序字符串数组的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [微信小程序之数据类型(array、Number)转换](https://blog.csdn.net/chunchun1230/article/details/104823654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [微信小程序WXML页将字符串转换成数组并循环输出](https://blog.csdn.net/shghnn/article/details/118938306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值