在JQuery中将HTML行转换为名称-值对
我正在尝试使用Jquery将HTML表转换为JSON格式的名称-值对在JQuery中将HTML行转换为名称-值对,jquery,html,Jquery,Html,我正在尝试使用Jquery将HTML表转换为JSON格式的名称-值对 <table class="table"> <thead class="thead-light"> <tr> <th>MobileNumber</th> <th>Amount</th> <
<table class="table">
<thead class="thead-light">
<tr>
<th>MobileNumber</th>
<th>Amount</th>
<th>Fuel</th>
</tr>
</thead>
<tbody>
<tr>
<td>1223445</td>
<td>12.49</td>
<td>1223</td>
</tr>
<tr>
<td>99999</td>
<td>11.39</td>
<td>1277745</td>
</tr>
</tbody>
</table>
我正试图从()修改此函数,但无法正确执行
var result = $('myTable tbody').children().map(function () {
var children = $(this).children();
return {
name: children.eq(0).text(),
value: children.eq(1).text()
};
}).get();
有人想到将HTML表转换为上述JSON格式吗
-Alan-您也可以从
元素中选择列名,并通过列索引进行匹配。我还修复了你的“TemplateFields”打字错误,应该是“TemplateFields”。(缺少“l”)
var colNames=$('.table thead th').get().map(el=>el.textContent);
var result=$('.table tbody').children().map(函数(){
var children=$(this.children().get();
var resultObj={Customer:{},TemplateFields:[]};
children.forEach((单元格,索引)=>{
如果(索引==0){
resultObj['Customer'][colNames[index]]=cell.innerText;
}否则{
resultObj['TemplateFields'].push({
名称:colNames[索引],
值:cell.innerText
});
}
});
返回结果j;
}).get();
控制台日志(结果)代码>
移动电话
数量
燃料
1223445
12.49
1223
99999
11.39
1277745
首先,循环通过thead
获取名称属性:
var cols = $("table>thead>tr>th").map(function() {
return $(this).text()
});
然后循环遍历每一行$('table>tbody>tr')
创建一个要添加到结果数组中的条目,并在每一行中,循环遍历除第一行以外的每个单元格以生成名称/值对
var cols=$(“表>thead>tr>th”).map(函数(){
返回$(this.text())
});
var结果=[];
$('table>tbody>tr')。每个(函数(){
var cells=$(this.find(“td”);
变量行={
客户:{MobileNumber:cells.first().text()},
模板场:[]
};
单元。每个单元(功能(即,e){
如果(i==0)返回;//跳过第一列
row.TemplateFieds.push({
“名称”:cols[i],
“值”:$(this).text()
})
});
结果:推动(世界其他地区);
});
控制台日志(结果)代码>
移动电话
数量
燃料
1223445
12.49
1223
99999
11.39
1277745
给您:
let tab = document.getElementById("tab");
let names = tab.querySelectorAll("th");
let values = tab.querySelector("tbody").children;
let arr = [];
for(let i =0; i < values.length;i++){
let obj = {};
for(let j = 0;j < names.length;j++){
obj[names[j].innerHTML] = values[i].children[j].innerHTML;
}
arr.push(obj);
}
console.log(JSON.stringify(arr));
let tab=document.getElementById(“tab”);
让name=tab.queryselectoral(“th”);
让value=tab.querySelector(“tbody”).children;
设arr=[];
for(设i=0;i
但这不是一个好的解决方案决定一列是否应该进入“Customer”
或模板字段的逻辑是什么“
?或者这只是一个任意规则,列不会发生更改?第一列始终转到Customer,其余列应转到TemplateFields,以确定amount/fuel是否为字符串/数字。我已编辑了该问题。所有内容都应该是字符串格式。一些解释可能是一件好事,以确保作者理解您的意图,特别是如果您的建议从长远来看实际上不是一个好的解决方案。
let tab = document.getElementById("tab");
let names = tab.querySelectorAll("th");
let values = tab.querySelector("tbody").children;
let arr = [];
for(let i =0; i < values.length;i++){
let obj = {};
for(let j = 0;j < names.length;j++){
obj[names[j].innerHTML] = values[i].children[j].innerHTML;
}
arr.push(obj);
}
console.log(JSON.stringify(arr));