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

如何用jQuery实现日历垂直排版?当前代码仅支持横向显示

实现垂直排版的日历(列优先填充)

看起来你想要的是列优先的日历布局:每一列依次包含1、8、15...,2、9、16...这样的日期序列,而不是原有代码生成的行优先(每行1-7、8-14...)横向排版。我们只需要调整填充逻辑为按列优先即可实现需求。

实现思路

  1. 日历固定7列(对应一周7天),计算所需行数:Math.ceil(31/7) = 5行(31天最多需要5行容纳)。
  2. 先创建好5行,每行包含7个空的<td>单元格,确保结构完整。
  3. 按列遍历填充:先填满第一列的所有行,再依次处理第二列、第三列...直到所有日期都放入对应位置。
  4. 列与行的日期计算:对于第c列(从0到6)和第r行(从0到4),对应的日期为 c + 1 + r*7,如果数字超过31则停止当前列的填充。

完整代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="table-responsive"></div>
<script>
$(function() {
  var $table = $('<table>',{'class': 'table-calendar table table-hover text-center table-calendar'});
  var $tbody = $('<tbody>').appendTo($table);
  var totalColumns = 7; // 一周7天
  var totalRows = Math.ceil(31 / totalColumns); // 计算需要的行数

  // 先创建所有行和空单元格
  for(var r = 0; r < totalRows; r++) {
    var $tr = $('<tr>').appendTo($tbody);
    for(var c = 0; c < totalColumns; c++) {
      $('<td>').appendTo($tr);
    }
  }

  // 按列优先填充日期
  for(var c = 0; c < totalColumns; c++) {
    for(var r = 0; r < totalRows; r++) {
      var dateNum = c + 1 + r * 7;
      if(dateNum > 31) break; // 超过31天就停止当前列的填充
      $tbody.find('tr').eq(r).find('td').eq(c).text(dateNum);
    }
  }

  $('.table-responsive').html($table);
});
</script>

效果说明

生成的日历列结构完全匹配你的期望:

  • 第一列:1、8、15、22、29
  • 第二列:2、9、16、23、30
  • 第三列:3、10、17、24、31
  • 第四列:4、11、18、25
  • 第五列:5、12、19、26
  • 第六列:6、13、20、27
  • 第七列:7、14、21、28

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:01:56