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

点击按钮在现有表格下方展开新表格的实现方案

纯原生实现表格行展开子表格方案

实现思路

在目标行后插入默认隐藏的扩展行,利用原生JavaScript监听按钮点击事件,切换扩展行的显示/隐藏状态,同时通过colspan属性保证子表格与原表格等宽,展开时自动推送下方内容。


1. 调整后的HTML结构(已翻译为中文)

<table>
    <tr>
        <th></th>
        <th>供应商</th>
        <th>原始交货日期</th>
        <th>交货ID</th>
    </tr>
    <!-- 第一行(延迟交货) -->
    <tr class="new_tr verspaetet">
        <td><input type="image" src="./img/down-arrow.png" class="expand-btn" alt="展开"/></td>
        <td>穆勒有限公司</td>
        <td>2022.10.20</td>
        <td>12384123</td>
    </tr>
    <!-- 第一行的扩展子表格 -->
    <tr class="expandable-row">
        <td colspan="4">
            <table class="sub-table">
                <tr>
                    <th>延迟原因</th>
                    <th>新交货日期</th>
                    <th>联系人</th>
                </tr>
                <tr>
                    <td>物流延误</td>
                    <td>2022.10.25</td>
                    <td>汉斯·穆勒</td>
                </tr>
            </table>
        </td>
    </tr>
    <!-- 第二行 -->
    <tr class="new_tr">
        <td><input type="image" src="./img/down-arrow.png" class="expand-btn" alt="展开"/></td>
        <td>水务有限公司</td>
        <td>今日</td>
        <td>12385533</td>
    </tr>
    <tr class="expandable-row">
        <td colspan="4">
            <table class="sub-table">
                <tr>
                    <th>配送方式</th>
                    <th>预计送达时间</th>
                </tr>
                <tr>
                    <td>标准快递</td>
                    <td>14:00-16:00</td>
                </tr>
            </table>
        </td>
    </tr>
    <!-- 第三行 -->
    <tr class="new_tr">
        <td><input type="image" src="./img/down-arrow.png" class="expand-btn" alt="展开"/></td>
        <td>烧烤用品有限公司</td>
        <td>今日</td>
        <td>94728544</td>
    </tr>
    <tr class="expandable-row">
        <td colspan="4">
            <table class="sub-table">
                <tr>
                    <th>商品明细</th>
                    <th>数量</th>
                </tr>
                <tr>
                    <td>木炭</td>
                    <td>10袋</td>
                </tr>
                <tr>
                    <td>烤架配件</td>
                    <td>1套</td>
                </tr>
            </table>
        </td>
    </tr>
    <!-- 剩余行按上述结构复制即可 -->
</table>

2. CSS样式设置

/* 主表格基础样式 */
table {
    width: 100%;
    border-collapse: collapse;
    margin: 20px 0;
    font-size: 14px;
}
th, td {
    border: 1px solid #ddd;
    padding: 8px;
    text-align: left;
}
th {
    background-color: #f2f2f2;
}

/* 扩展行初始隐藏 */
.expandable-row {
    display: none;
}

/* 子表格与主表格等宽 */
.sub-table {
    width: 100%;
    border-collapse: collapse;
    margin: 10px 0;
}
.sub-table th {
    background-color: #e8f4f8;
}

3. 原生JavaScript逻辑

const mainTable = document.querySelector('table');

// 事件委托监听按钮点击
mainTable.addEventListener('click', function(e) {
    if (e.target.classList.contains('expand-btn')) {
        const parentRow = e.target.closest('.new_tr');
        const expandRow = parentRow.nextElementSibling;
        
        // 切换扩展行显示状态
        if (expandRow.style.display === 'table-row') {
            expandRow.style.display = 'none';
            e.target.src = './img/down-arrow.png';
            e.target.alt = '展开';
        } else {
            expandRow.style.display = 'table-row';
            e.target.src = './img/up-arrow.png'; // 需准备对应向上箭头图片
            e.target.alt = '收起';
        }
    }
});

核心要点

  • 事件委托:避免给每个按钮单独绑定事件,适配动态生成的行,提升性能。
  • colspan对齐:扩展行单元格设置colspan="4"(与主表格列数一致),确保子表格宽度完全匹配主表格。
  • 无依赖实现:全程使用原生HTML/CSS/JavaScript,无需任何第三方库或框架。
  • 交互优化:切换箭头图标,让用户直观感知当前展开/收起状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:50:26