news 2026/4/29 10:25:24

如何修复 JavaScript 日历仅渲染首行的问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何修复 JavaScript 日历仅渲染首行的问题

本文详解 jquery 实现月度日历时“只显示第一行”的典型逻辑缺陷,指出核心问题在于循环未覆盖整个月份天数、行追加时机错误,并提供结构清晰、可复用的修复方案,含优化代码、html 结构建议与关键注意事项。 本文详解 jquery 实现月度日历时“只显示第一行”的典型逻辑缺陷,指出核心问题在于循环未覆盖整个月份天数、行追加时机错误,并提供结构清晰、可复用的修复方案,含优化代码、html 结构建议与关键注意事项。在使用 JavaScript(配合 jQuery)动态生成 HTML 表格形式的日历时,一个常见却隐蔽的错误是:日历只渲染出第一周(即首行 7 个单元格),后续行完全缺失。这并非 DOM 插入失败或 CSS 隐藏所致,而是循环控制逻辑与表格行(<tr>)生命周期管理不当导致的——原始代码中 for (var day = 0; day < 7; day++) 强制限制了仅遍历 7 次,本质上把“一周”误当作“一整月”来处理,自然无法生成 4–6 行的完整日历。要正确构建日历,需分三步系统性处理:计算前置空单元格数:获取当月 1 日是星期几(getDay() 返回 0–6,0=Sunday),在首行前补足对应数量的空 <td>;逐日填充日期单元格:从 1 号开始,依次插入 <td>1</td>、<td>2</td> … 直至月末最后一天;智能截断并闭合行:每当累计单元格数达到 7 的倍数(即本周结束),或已填完最后一天时,将当前 <tr> 追加到 <tbody>;若月末未满 7 天,还需补足尾部空单元格以保持表格对齐。以下是修复后的精简、健壮且符合现代实践的实现:"use strict";// 月份名称映射(替代冗长 if-else)const MONTH_NAMES = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];// 获取指定年月的最后一天日期(返回数字,如 31)const getLastDayOfMonth = (year, month) => new Date(year, month + 1, 0).getDate();$(document).ready(function() { const now = new Date(); const currentMonth = now.getMonth(); const currentYear = now.getFullYear(); const monthName = MONTH_NAMES[currentMonth]; // 更新标题 $('#month_year').text(`${monthName} ${currentYear}`); // 计算关键参数 const firstDayOfWeek = new Date(currentYear, currentMonth, 1).getDay(); // 0=Sun const lastDay = getLastDayOfMonth(currentYear, currentMonth); const $calendarTable = $('#calendar'); let $row = $('<tr>'); let cellCount = 0; // 当前行已添加单元格数 // 步骤1:添加前置空单元格(1号前的空白占位) for (let i = 0; i < firstDayOfWeek; i++) { $row.append('<td></td>'); cellCount++; } // 步骤2 & 3:填充日期 + 动态换行 for (let day = 1; day <= lastDay; day++) { $row.append(`<td>${day}</td>`); cellCount++; // 满7列 或 已到最后一天 → 关闭当前行 if (cellCount % 7 === 0 || day === lastDay) { // 若月末未满一行,补足空单元格(保持7列对齐) if (day === lastDay && cellCount % 7 !== 0) { const trailing = 7 - (cellCount % 7); for (let i = 0; i < trailing; i++) { $row.append('<td></td>'); } } $calendarTable.append($row); $row = $('<tr>'); // 重置为新行 cellCount = 0; } }});配套的 HTML 结构建议采用语义化 <thead>/<tbody> 分离,提升可维护性与可访问性: 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 10:22:51

D14: 周复盘:人是核心,工具是杠杆

文章目录 D14: 周复盘:人是核心,工具是杠杆 🎯 本周回顾:都发生了什么? 第一周的大事记 数据不会说谎 核心复盘内容 复盘维度一:人的层面——谁在进步,谁在旁观? 复盘维度二:工具层面——哪些工具真的在产生价值? 复盘维度三:流程层面——AI 改变了什么,没改变什么…

作者头像 李华
网站建设 2026/4/29 10:17:23

别再只会npm run build了!手把手教你根据项目类型(Vue/React/Next.js)配置正确的package.json脚本

前端项目构建脚本配置实战指南&#xff1a;从Vue到Next.js的package.json优化 当你第一次从教程或模板项目切换到自己的实际项目时&#xff0c;是否遇到过npm run build命令突然失效的尴尬&#xff1f;这就像拿到一把万能钥匙却发现打不开自家门锁一样令人沮丧。不同前端框架有…

作者头像 李华
网站建设 2026/4/29 10:15:47

CentOS系统------DBMS

逻辑梳理一、准备工作 # 切换到root或使用sudo su - 二、安装 Apache sudo yum install -y httpd sudo systemctl start httpd sudo systemctl enable httpd 三、安装 PHP 环境 sudo yum install -y php php-mysqlnd php-json php-mbstring sudo systemctl restart httpd 四、安…

作者头像 李华
网站建设 2026/4/29 10:05:52

企业任务管理软件哪个好用?10款主流工具测评盘点

本文将深入对比10款工作任务管理系统&#xff1a;Worktile、PingCode、Jira Confluence、monday.com、Asana、ClickUp、Wrike、Smartsheet、Teamwork、Trello。很多企业在选工作任务管理系统时&#xff0c;最头疼的其实不是“工具太少”&#xff0c;而是“工具太多&#xff0c…

作者头像 李华