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

自动计算表格问题求助:列宽修改、合并表头及一行三表实现

表格功能修复方案

问题1:第2、3列宽度无法修改

当前列宽被输入框和表格默认布局干扰,通过以下调整解决:

  • 给对应列的td和th统一设置固定宽度,同时限制输入框宽度为100%,避免撑大单元格。
  • 同步修改CSS中列相关样式,确保表头和数据列宽度一致。

问题2:添加跨列合并表头

在每个表格最顶部插入一行,包含一个colspan等于表格总列数(5列)的表头单元格,显示表格序号。

问题3:一行容纳3个表格

给包裹表格的行容器添加Flex布局,设置自动换行和间距,同时调整表格宽度为合理值,确保一行能放下3个表格。


修改后的完整代码

JavaScript

function createTables() {
  const plateCount = document.getElementById("kolonnu skaits").value;
  const tableContainer = document.getElementById("table-container");
  tableContainer.innerHTML = "";

  let tableRow = document.createElement("div");
  tableRow.classList.add("table-row");
  tableContainer.appendChild(tableRow);

  for (let i = 1; i <= plateCount; i++) {
    const table = document.createElement("table");
    table.style.width = "30%";
    
    // 添加跨列表头
    const mainHeaderRow = document.createElement("tr");
    mainHeaderRow.innerHTML = `<th colspan="5" class="main-header">${i}</th>`;
    table.appendChild(mainHeaderRow);

    const headerRow = document.createElement("tr");
    headerRow.innerHTML = `
      <th></th>
      <th class="paraugs">Paraugs</th>
      <th class="koncentracija">[C]</th>
      <th>DNS</th>
      <th>TE</th>
    `;
    table.appendChild(headerRow);

    for (let j = 1; j <= 8; j++) {
      const row = document.createElement("tr");
      row.innerHTML = `
        <td>${j}</td>
        <td class="paraugs"><input type="text" placeholder="" class="full-width-input"></td>
        <td class="koncentracija"><input type="number" placeholder="" id="concentration-${i}-${j}" class="no-arrows full-width-input"></td>
        <td id="DNS-${i}-${j}">0</td>
        <td id="TE-${i}-${j}">0</td>
      `;
      table.appendChild(row);
    }

    // 每3个表格换行
    if (i % 3 === 0) {
      tableRow = document.createElement("div");
      tableRow.classList.add("table-row");
      tableContainer.appendChild(tableRow);
    }
    tableRow.appendChild(table);

    // 计算逻辑保留
    for (let j = 1; j <= 8; j++) {
      const concentrationInput = document.getElementById(`concentration-${i}-${j}`);
      concentrationInput.addEventListener('input', () => {
        const DNSCell = document.getElementById(`DNS-${i}-${j}`);
        const TECell = document.getElementById(`TE-${i}-${j}`);
        const concentration = concentrationInput.value;
        DNSCell.innerText = concentration > 0 ? `=${parseFloat(80 / concentration).toFixed(3)}` : "0";
        TECell.innerText = concentration > 0 ? `=${parseFloat(5 - 80 / concentration).toFixed(3)}` : "0";
      });
    }
  }
}

CSS

/* 表格行容器:Flex布局实现自动排列换行 */
.table-row {
  display: flex;
  flex-wrap: wrap;
  gap: 15px;
  margin-bottom: 15px;
}

table {
  border-collapse: collapse;
}

th, td {
  border: 1px solid #000000;
  padding: 8px;
  text-align: left;
}

/* 固定第2、3列宽度 */
th.paraugs, td.paraugs,
th.koncentracija, td.koncentracija {
  width: 120px;
}

/* 跨列表头样式 */
.main-header {
  text-align: center;
  font-size: 1.2em;
  background-color: #f0f0f0;
}

/* 输入框占满单元格宽度 */
.full-width-input {
  width: 100%;
  box-sizing: border-box;
}

body {
  background-color: lightblue;
  padding: 20px;
}

.no-arrows::-webkit-inner-spin-button,
.no-arrows::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

HTML

<h1>Kolonnu skaits</h1>
<input type="number" id="kolonnu skaits" value="3" min="1">
<button onclick="createTables()">Izveidot</button>
<div id="table-container"></div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:52:33