You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript拼接表格列仅首行生效,其余行空白问题求助

问题解决指引

问题根源

HTML中id属性是全局唯一标识,你在Razor的foreach循环里重复生成了相同的id(ruta1、desborde1、concatenate),导致getElementById只会获取到页面中第一个匹配的元素,所以只有表格首行完成拼接,其余行无操作。

修改方案

1. 调整HTML(Razor代码)

将重复的id替换为class,因为class允许在多个元素上重复使用:

<table id="Enrut_calx" class="table table-striped">
    <thead class="thead-dark">
        <tr>
            <th class="text-center">Ruta 1</th>
            <th class="text-center">Desborde 1</th>
        </tr>
    </thead>
    @foreach (var item in Model)
    {
        <tr>                    
            <td class="text-center ruta1">
                @Html.DisplayFor(modelItem => item.RUTA_1)
            </td>
            <td class="text-center desborde1">
                @Html.DisplayFor(modelItem => item.DESBORDE_1)
            </td>
            <td class="text-center concatenate">
                @Html.DisplayFor(modelItem => item.DESBORDES)
            </td>
           
        </tr>
    }
</table>

2. 重写JavaScript代码

遍历表格的每一行,针对每行单独获取对应单元格内容并拼接:

// 获取目标表格
const table = document.getElementById('Enrut_calx');
// 获取表格中所有数据行(跳过表头)
const dataRows = table.querySelectorAll('tbody tr');

// 遍历每一行处理
dataRows.forEach(row => {
    // 在当前行内获取对应class的单元格内容
    const ruta = row.querySelector('.ruta1').innerHTML;
    const desborde = row.querySelector('.desborde1').innerHTML;
    // 将拼接结果赋值给当前行的目标单元格
    row.querySelector('.concatenate').innerHTML = ruta + desborde;
});

代码逻辑说明

  • 用querySelectorAll('tbody tr')精准获取表格的所有数据行(自动跳过表头行)
  • 遍历每行时,通过row.querySelector在当前行范围内查找元素,确保不会跨行获取内容
  • 直接将拼接结果赋值给目标单元格,避免原代码中innerHTML +=可能导致的重复追加问题

内容的提问来源于stack exchange,提问作者96Miin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:25:22