表格处理fight_declaration数据生成tr/td遇阻,求技术解决方案
修正方案:实现count>1生成独立行、count=1合并为同一行
我明白你遇到的问题了——当前代码处理count=1的条目时只生成了孤立的<td>标签,没有用<tr>包裹,这会让浏览器自动补全错误的表格结构,导致多余的行。同时你需要把所有count=1的条目合并到同一个<tr>的多个<td>中,而不是零散处理。
以下是修正后的代码:
var json = '[ {"fight_declaration": 1, "count": 2 }, {"fight_declaration": 3, "count": 1 }, {"fight_declaration": 2, "count": 1 } ]'; var data = ''; // 新增变量收集所有count=1的td内容 var singleCountTDs = ''; $.each(JSON.parse(json),function(key,val) { // 封装生成td的逻辑,避免重复代码 function generateTD(type) { switch(type) { case 1: return '<td><span class="red-dot"></span></td>'; case 2: return '<td><span class="blue-dot"></span></td>'; case 3: return '<td><span class="green-dot"></span></td>'; case 4: return '<td><span class="yellow-dot"></span></td>'; default: return ''; } } if(val.count > 1) { // count>1时,每个数量生成独立的tr for(let i = 0; i < val.count; i++) { data += '<tr>' + generateTD(val.fight_declaration) + '</tr>'; } } else { // count=1时,先收集td,不直接拼接tr singleCountTDs += generateTD(val.fight_declaration); } }); // 如果有count=1的条目,把它们的td包裹在同一个tr里 if(singleCountTDs) { data += '<tr>' + singleCountTDs + '</tr>'; } $(".trend-table").find("tbody").html(data);
关键改动说明:
- 提取了
generateTD函数,避免重复的if-else判断,让代码更简洁易维护 - 新增
singleCountTDs变量专门收集所有count=1的条目对应的<td>内容 - 遍历完成后,统一将收集到的
<td>用一个<tr>包裹,再拼接到最终的HTML字符串中 - 保留了
count>1时生成独立<tr>的逻辑,这部分是符合需求的
这样处理后,就能实现:
- 所有
count>1的条目,每个计数生成单独的表格行 - 所有
count=1的条目,全部合并到同一个表格行的不同单元格中
内容的提问来源于stack exchange,提问作者Jerson
相关产品推荐
相关产品推荐

