本文详解如何通过 `rowspan` 属性让表格左侧的分类标签(如 label 1、label 2)垂直跨多行显示,避免重复渲染,匹配真实数据分组结构。核心在于预统计每组标签的行数,并在首次出现时设置 `rowspan`,后续同组行跳过该 `
在构建分组型数据表格(例如带分类标题的配置项列表、报表明细等)时,常见的需求是:左侧“分类标签”只在首行显示,并纵向跨越其所属的所有数据行——这正是 HTML
const numRowsByLabel = data.reduce((acc, row) => {
acc[row.rowLabel] = (acc[row.rowLabel] || 0) + 1;
return acc;
}, {});
{labels.map((label) => {
let isFirstRow = true; // 每个 label 组独立重置
return data
.filter(row => row.rowLabel === label) // 先过滤出本组数据(更清晰)
.map((row, idx) => {
const numRows = numRowsByLabel[label];
const shouldRenderLabelCell = isFirstRow;
isFirstRow = false;
return (

{shouldRenderLabelCell && (
{label}
)}
{row.key}
{row.value}
);
});
})}
| ❌ 错误效果(重复标签) | ✅ 正确效果(跨行标签) |
|---|---|
| | LABEL 1 | 1 | | | LABEL 1 | 1 | |
| | LABEL 2 | 2 | | | | 2 | |
| | LABEL 2 | 3 | | | LABEL 2 | 3 | |
通过以上方法,你就能优雅地实现专业级分组表格——既符合语义化 HTML 规范,又具备良好的可维护性与扩展性。
来电咨询