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

如何在JavaScript模板字面量表达式中使用$(this)获取生成行索引

问题原因

你现有代码中的this指向的是触发点击事件的.add-row添加按钮,该按钮位于表格表头的行内,所以$(this).closest("tr")获取到的是表头行,自然无法得到新增数据行的索引。

实现方案

方案1:通过已有行数量计算索引(最简单)

新增行的索引等于插入前tbody已有行的长度(索引默认从0开始计数),直接计算后插入模板即可:

$(document).on('click', '.add-row', function () {
  const $tbody = $(this).closest("table").find("tbody");
  // 计算新行索引
  const newRowIndex = $tbody.children('tr').length;
  $tbody.append(`
     <tr>
       <td> ${ newRowIndex } </td>
       <td>自定义内容</td>
       <td><button class="btn btn-danger del-row">删除行</button></td>
    </tr>
  `)
});

方案2:插入后获取索引(准确性更高,适配行删除场景)

如果后续有删除行的需求,担心长度计算不准,可以先创建行元素插入到DOM后,再获取实际索引赋值:

$(document).on('click', '.add-row', function () {
  const $tbody = $(this).closest("table").find("tbody");
  // 先创建行对象
  const $newRow = $(`
     <tr>
       <td></td>
       <td>自定义内容</td>
       <td><button class="btn btn-danger del-row">删除行</button></td>
    </tr>
  `);
  // 插入到表格
  $tbody.append($newRow);
  // 获取实际索引后赋值给单元格
  $newRow.find('td:first').text($newRow.index());
});

补充:删除行后自动刷新索引

如果需要支持删除行后所有行索引自动更新,可以添加如下删除逻辑:

$(document).on('click', '.del-row', function () {
  const $currentRow = $(this).closest('tr');
  const $tbody = $currentRow.closest('tbody');
  $currentRow.remove();
  // 遍历所有行重新赋值索引
  $tbody.find('tr').each(function(index) {
    $(this).find('td:first').text(index);
  })
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:09:04