javascript - 想将下面的html转换成JSON结构
问题描述
这是我的 HTML 代码
<table id="detailtab" style="" border="1">
<tbody id="load-attr">
<tr>
<td style="padding: 4px">No of bidder participated in SB <input type="number" value="0" max="5" min="0" style="text-align:right"> <span>then eliminate</span> <input type="number" value="0" max="5" min="0" style="text-align:right"> bidder
</td>
</tr>
<tr>
<td style="padding: 4px">No of bidder participated in SB <input type="number" value="0" max="5" min="0" style="text-align:right"> <span>then eliminate</span> <input type="number" value="0" max="5" min="0" style="text-align:right"> bidder
</td>
</tr>
<tr>
<td style="padding: 4px">No of bidder participated in SB <input type="number" value="0" max="5" min="0" style="text-align:right"> <span>then eliminate</span> <input type="number" value="0" max="5" min="0" style="text-align:right"> bidder
</td>
</tr>
</tbody>
</table>
我想将此html代码转换为下面的json结构
{
"noOfPredicates": 3,
"predicates": [{
"elements": [{
"label": "No of bidder participated in SB",
"pre": true,
"value": "",
"type": "number",
"options": [],
"classAttr": "",
"visible": true,
"readonly": false
}, {
"label": "",
"pre": true,
"value": "then eliminate",
"type": "display",
"options": [],
"classAttr": "",
"visible": true,
"readonly": false
}, {
"label": "bidder",
"pre": false,
"value": "",
"type": "number",
"options": [],
"classAttr": "",
"visible": true,
"readonly": false
}]
}]
}
noOfPredicates
是每行的表行数,其中一个td
包含 objects 的元素数组。- pre : true 表示标签应该在输入类型之前或在输入类型之后。
- 如果 type : display 表示它应该是 span。
解决方案
我建议你直接使用 DOM 元素的规则集。
const jsonObject = {};
const table = document.querySelector('table');
function parseHtml(element) {
Object.entries(element.attributes).forEach(attribute => {
// add desired data to jsonObject structure
});
element.children.forEach(child => parseHtml(child));
}
parseHtml(table);
在这里,您可以看到我创建了一个递归函数,可以帮助您完成任务。
PS 甚至不尝试将其解析为字符串或使用正则表达式,这是没有希望的。只需使用 DOM,如果您有一个不是 DOM 的字符串,则将其从字符串转换为:
var div = document.createElement('div');
div.innerHTML = htmlString;
最良好的祝愿,尤金。
推荐阅读
- flutter - 如何测试取决于来自提供者的数据的颤振小部件
- sockets - 向 Google Web App 上的所有客户端发送数据
- arrays - 解码 JSON 文件时收到 DecodingError.dataCorrupted 错误
- python - 如何从 sqlalchemy 中的 session/engine/meta 获取表名及其数据类型?
- c# - App_Code“添加类”灰显
- jquery - 替换 URL 中的 User_ID
- javascript - 具有输入属性“必需”和“模式”的表单不起作用
- reactjs - SignalR 和 React - 由于底层连接被关闭而取消调用
- javascript - 在不同的项目 NPM 命令中克隆 Git 后出错
- postgresql - 本地版本的 postgres 外部数据包装器会自动更新吗?