答案是使用html表格构建节次×星期二维网格,首行首列为标题,其余单元格嵌入带data-day和data-period属性的复选框,通过js可解析选中项生成结构化数组。

用 HTML 实现星期与节次的网格勾选(类似课程表选课界面),核心是构建一个二维表格结构,行代表节次(如第1节、第2节…),列代表星期(周一至周五或周日到周六),每个单元格内放置带 name 和 value 的复选框(input type="checkbox"),并统一命名规则以便后端或 JS 识别选中位置。
结构设计:用 table 构建节次 × 星期网格
表格第一行是星期标题(th),第一列是节次标题(th),其余单元格为复选框。关键在于给每个 checkbox 设置唯一且可解析的 name 或 value,推荐用语义化命名,例如:
-
name="schedule"(统一 name,便于批量获取) -
value="mon_3"表示“周一第3节” - 或用
data-day="mon" data-period="3"配合 JS 解析(更灵活)
HTML 示例代码(含语义化 data 属性)
以下是一个简洁可用的 5 天 × 10 节示例(周一至周五,第1–10节):
| 周一 | 周二 | 周三 | 周四 | 周五 | |
|---|---|---|---|---|---|
| 第1节 |
获取选中数据(JS 简单示例)
提交前用 JS 收集所有勾选项,生成结构化数组:
const checked = Array.from(
document.querySelectorAll('input[name="schedule"]:checked')
).map(cb => ({
day: cb.dataset.day,
period: parseInt(cb.dataset.period)
}));
<p>console.log(checked);
// 输出如:[{day: "mon", period: 2}, {day: "wed", period: 4}]
</p>
增强体验的小技巧
- 加 CSS 让表格紧凑清晰:设置
table { border-collapse: collapse; },td, th { padding: 6px 10px; text-align: center; } - 点击单元格区域也能切换复选框:把
input包在label内,或用 JS 绑定td.onclick - 支持全选/取消当前行或列:添加按钮,通过
querySelectorAll批量操作对应data-day或data-period的复选框 - 避免重复提交:表单提交时禁用按钮,并校验至少选中一项
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











