我有一些HTML,JSON和Javascript。我想渲染一个由3行组成的表(从JSON开始)。问题是我的所有数据都在TD中出现在一个tr
中<table>
<tbody>
<tr>
<td>car</td>
<td>1000</td>
<td>2000</td>
<td>1500</td>
<td>1000</td>
<td>house</td>
<td>500</td>
<td>600</td>
<td>700</td>
<td>800</td>
<td>internet</td>
<td>100</td>
<td>200</td>
<td>2350</td>
<td>1940</td>
</tr>
</tbody>
</table>
我想要
<table>
<tbody>
<tr>
<td>car</td>
<td>1000</td>
<td>2000</td>
<td>1500</td>
<td>1000</td>
</tr>
<tr>
<td>house</td>
<td>500</td>
<td>600</td>
<td>700</td>
<td>800</td>
</tr>
<tr>
<td>internet</td>
<td>100</td>
<td>200</td>
<td>2350</td>
<td>1940</td>
</tr>
</tbody></table>
这是我的代码 HTML
<div class="calc"></div>
JSON
{
"item": [
{
"name": "car",
"cost": [1000, 2000, 1500, 1000]
},
{
"name": "house",
"cost": [500, 600, 700, 800]
},
{
"name": "internet",
"cost": [100, 200, 2350, 1940]
}
]
}
Javascript
$.getJSON("calc.json", function(data) {
var $table = $('<table/>'),
$row = $('<tr/>');
for(var i = 0; i < data.item.length; i ++){
$row.append( '<td>' + data.item[i].name + '</td>' );
for (var cost = 0; cost < data.item[i].cost.length; cost ++) {
$row.append( '<td>' + data.item[i].cost[cost] + '</td>' );
}
}
$('.calc').append($table.append($row));
});
编辑代码密集度较低的版本
$.getJSON("calc.json", function(data) {
var $table = $("<table/>");
$.each(data.item, function(k,v) {
var $row = $("<tr/>");
$row.append("<td>" + v.name + "</td>");
$.each(v.cost, function(k,v) {
$row.append("<td>" + v + "</td>");
});
$table.append($row);
});
$(".calc").append($table);
});
答案 0 :(得分:3)
嗨我已经改变了你的功能但现在你可以使用下面给出的功能: -
$.getJSON("calc.json", function(data) {
var $table = $('<table/>');
for(var i = 0; i < data.item.length; i ++){
var $row = $('<tr/>');
$row.append( '<td>' + data.item[i].name + '</td>' );
for (var cost = 0; cost < data.item[i].cost.length; cost ++) {
$row.append( '<td>' + data.item[i].cost[cost] + '</td>' );
}
$table.append($row);
}
$('.calc').append($table );
});
答案 1 :(得分:3)
var $table = $('<table/>');
for(var i = 0; i < data.item.length; i ++){
var $row = $('<tr/>');
$row.append( '<td>' + data.item[i].name + '</td>' );
for (var cost = 0; cost < data.item[i].cost.length; cost ++) {
$row.append( '<td>' + data.item[i].cost[cost] + '</td>' );
}
$table.append($row)
}
$('.calc').append($table);
答案 2 :(得分:1)
问题在于这是因为您已为所有项目仅声明了一行。
为每个项目创建新行。
像波纹管一样改变你的功能。
$.getJSON("calc.json", function(data) {
var $table = $('<table/>');
for(var i = 0; i < data.item.length; i ++){
var $row = $('<tr/>'); //new Row for current ITEM
$row.append( '<td>' + data.item[i].name + '</td>' );
for (var cost = 0; cost < data.item[i].cost.length; cost ++) {
$row.append( '<td>' + data.item[i].cost[cost] + '</td>' );
}
$table.append($row); // append current row
}
$('.calc').append($table);
});