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

Vue3中使用响应式数据时HTML表格显示异常求助

问题解决:Vue3中带rowspan的表格行折叠问题

你的表格布局异常是HTML结构错误导致的:<tr>不能直接嵌套在另一个<tr>内部,这种不符合规范的结构会让浏览器解析混乱,结合Vue响应式数据渲染后,就会出现行折叠的问题。

步骤1:修正基础表格结构

正确的带rowspan的表格结构应该是:将跨多行的单元格放在第一行,后续行只填充剩余列,示例如下:

<table border="1">
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <!-- 第一行:包含跨3行的Company单元格 -->
  <tr>
    <td rowspan="3">test</td>
    <td>test 1</td>
    <td>test 1</td>
  </tr>
  <!-- 第二、三行:仅填充Contact和Country列 -->
  <tr>
    <td>test 1</td>
    <td>test 1</td>
  </tr>
  <tr>
    <td>test 1</td>
    <td>test 1</td>
  </tr>
</table>

步骤2:结合Vue3响应式数据实现

假设你的响应式数据结构如下:

import { ref } from 'vue'

// 示例数据:公司名 + 多组联系人/国家信息
const companyInfo = ref({
  name: 'test',
  details: [
    { contact: 'test 1', country: 'China' },
    { contact: 'test 2', country: 'USA' },
    { contact: 'test 3', country: 'Japan' }
  ]
})

在Vue模板中,通过v-for动态渲染时,仅在第一行渲染跨多行的单元格,并通过details.length动态设置rowspan的值:

<table border="1">
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr v-for="(item, idx) in companyInfo.details" :key="idx">
    <!-- 仅循环的第一项渲染Company单元格,rowspan值等于数据条数 -->
    <td v-if="idx === 0" :rowspan="companyInfo.details.length">
      {{ companyInfo.name }}
    </td>
    <td>{{ item.contact }}</td>
    <td>{{ item.country }}</td>
  </tr>
</table>

这样就能保证表格结构符合规范,Vue动态渲染后也不会出现行折叠的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:39:46