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

如何使用jQuery实现表格及对应标题按数字列联动排序

问题原因

你现有的DOM结构中,表名(.head元素)和对应表格(.box元素)是同级独立节点,现有代码仅对表格节点做了排序移动,表名节点没有同步处理,因此无法跟着表格一起调整顺序。

解决方案

这里提供两种可直接复用的方案:

方案1:调整DOM结构(推荐,后续维护更简单)

将每组表名和对应表格包裹在同一个父容器中,排序时直接操作父容器即可:

  1. 修改HTML结构,给每一组表名+表格加外层容器:
<div id="container">
  <!-- 每组都套一个table-group容器 -->
  <div class="table-group">
    <div class="head">Table 1</div>
    <table border=2px class="box">
      <tr>
        <td class="name">mui</td>
        <td class="number">4512</td>
      </tr>
    </table>
  </div>
  <div class="table-group">
    <div class="head">Table 2</div>
    <table border=2px class="box">
      <tr>
        <td class="name">oinecellars</td>
        <td class="number">566</td>
      </tr>
    </table>
  </div>
  <!-- 剩下的9组都按上面的格式套上table-group即可 -->
</div>
  1. 修改JS逻辑,直接排序外层容器:
$('#alphBnt').on('click', function() {
  $(".table-group").sort((a, b) => {
    return $(a).find(".number").text() - $(b).find(".number").text()
  }).appendTo("#container")
});

方案2:不改现有HTML,仅调整JS逻辑

如果不想修改现有HTML结构,可以在排序完表格后,同步把对应表名移到表格前面:

$('#alphBnt').on('click', function() {
  $(".box").sort((a, b) => {
    return $(a).find(".number").text() - $(b).find(".number").text()
  }).each(function() {
    // 取当前表格的前一个表名节点,插到当前表格前面
    $(this).prev('.head').insertBefore($(this))
  }).appendTo("#container")
});

注意事项

你现有第一个表格的代码里有多余的</h2>标签,建议删除避免渲染异常:
原错误代码:

<td class="number">4512</h2></td>

修正后:

<td class="number">4512</td>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:06