用javascript写一个动态表,第一行合并居中为“技术网络科考勤表”,第二行居中为年月,年的选择范围为2022年到2099年,月的选择范围为1-12月,根据当年闰年还是平年,可生成2月天数。第三行第一列为“人名”,第三行第二列为“时间,”从第三行第三列左到右根据年月生成当月日期,第四行从第三列从左到右根据第三行日期生成对应星期几。第五行第一列往下,分别为“渠际时”、“陈海峰”、”梁胜玉”、“袁凯”、“侯博文”、“孙逍遥”、“郭智豪”、“杨沐松“”。第五行第二列往下,每个人名生成三行对应班次“行政班”、“生产班”、“夜班”,每个班次对应日期生成矩形方框输入,可以打√输入。第四行34列为“值班天数”,往下统计出此行输入√天数。第四行35列为“带班”,从第五行35列每个表格生成下拉可选择人员“渠际时”、“陈海峰”、“梁胜玉”、“袁凯”、“侯博文”、“孙逍遥”、“郭智豪”、“杨沐松”。在表格末尾生成“提交保存”按钮,功能为保存当前表格数据。

时间: 2023-10-07 09:11:07 浏览: 44
好的,这是一个比较复杂的需求,需要用到HTML、CSS和JavaScript来实现。我将会给出一个简单的实现方案,你可以根据自己的需求进行修改和优化。 首先,我们需要创建一个HTML页面,其中包含一个表格,用于展示考勤信息。代码如下: ```html <!DOCTYPE html> <html> <head> <title>技术网络科考勤表</title> <style> table { border-collapse: collapse; } td, th { border: 1px solid black; padding: 5px; text-align: center; } .center { text-align: center; } .month { width: 50px; } .date { width: 30px; } .checkbox { width: 20px; height: 20px; } .select { width: 100%; } </style> </head> <body> <table> <thead> <tr> <th colspan="35" class="center">技术网络科考勤表</th> </tr> <tr> <th colspan="2" class="center">年月</th> <th colspan="33" class="center">日期</th> </tr> <tr> <th>人名</th> <th>时间</th> <th class="month">1</th> <th class="month">2</th> <th class="month">3</th> <th class="month">4</th> <th class="month">5</th> <th class="month">6</th> <th class="month">7</th> <th class="month">8</th> <th class="month">9</th> <th class="month">10</th> <th class="month">11</th> <th class="month">12</th> <th class="date">1</th> <th class="date">2</th> <th class="date">3</th> <th class="date">4</th> <th class="date">5</th> <th class="date">6</th> <th class="date">7</th> <th class="date">8</th> <th class="date">9</th> <th class="date">10</th> <th class="date">11</th> <th class="date">12</th> <th class="date">13</th> <th class="date">14</th> <th class="date">15</th> <th class="date">16</th> <th class="date">17</th> <th class="date">18</th> <th class="date">19</th> <th class="date">20</th> <th class="date">21</th> <th class="date">22</th> <th class="date">23</th> <th class="date">24</th> <th class="date">25</th> <th class="date">26</th> <th class="date">27</th> <th class="date">28</th> <th class="date">29</th> <th class="date">30</th> <th class="date">31</th> <th>值班天数</th> <th>带班</th> </tr> </thead> <tbody> <tr> <td>渠际时</td> <td>行政班</td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="checkbox"><input type="checkbox"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td class="date"><input type="text"></td> <td>0</td> <td> <select class="select"> <option value="渠际时">渠际时</option> <option value="陈海峰">陈海峰</option> <option value="梁胜玉">梁胜玉</option> <option value="袁凯">袁凯</option> <option value="侯博文">侯博文</option> <option value="孙逍遥">孙逍遥</option> <option value="郭智豪">郭智豪</option> <option value="杨沐松">杨沐松</option> </select> </td> </tr> <!-- 其他人员的行 --> </tbody> </table> <button id="submit">提交保存</button> <script src="attendance.js"></script> </body> </html> ``` 在这个表格中,我们使用了三个不同的CSS类来设置样式。`.center`用于设置文本居中,`.month`和`.date`用于设置月份和日期的宽度。 接下来,我们需要使用JavaScript来动态生成表格中的内容。代码如下: ```javascript // 获取表格 var table = document.querySelector('table'); // 创建年份选择框 var yearSelect = document.createElement('select'); yearSelect.classList.add('select'); for (var i = 2022; i <= 2099; i++) { var option = document.createElement('option'); option.value = i; option.textContent = i; yearSelect.appendChild(option); } // 添加到表格中 table.rows[1].cells[0].appendChild(yearSelect); // 创建月份选择框 var monthSelect = document.createElement('select'); monthSelect.classList.add('select'); for (var i = 1; i <= 12; i++) { var option = document.createElement('option'); option.value = i; option.textContent = i; monthSelect.appendChild(option); } // 添加到表格中 table.rows[1].cells[1].appendChild(monthSelect); // 获取当前年份和月份 var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; // 根据年份和月份计算当月天数 function getDaysInMonth(year, month) { var days = new Date(year, month, 0).getDate(); if (month == 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) { // 闰年2月29天 days = 29; } return days; } // 根据年份和月份生成日期选择框 function createDateInput(year, month) { var days = getDaysInMonth(year, month); var fragment = document.createDocumentFragment(); for (var i = 1; i <= days; i++) { var input = document.createElement('input'); input.type = 'text'; input.classList.add('date'); fragment.appendChild(input); } return fragment; } // 根据年份和月份生成星期几 function createWeekday(year, month) { var days = getDaysInMonth(year, month); var fragment = document.createDocumentFragment(); for (var i = 1; i <= days; i++) { var weekday = new Date(year, month - 1, i).getDay(); var td = document.createElement('td'); td.textContent = '日一二三四五六'[weekday]; fragment.appendChild(td); } return fragment; } // 根据人员和日期生成单元格 function createCell(name, shift, year, month) { var td = document.createElement('td'); if (shift) { // 班次行 var shifts = ['行政班', '生产班', '夜班']; for (var i = 0; i < 3; i++) { var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.classList.add('checkbox'); td.appendChild(checkbox); td.appendChild(document.createTextNode(shifts[i])); td.appendChild(document.createElement('br')); } } else { // 时间和日期行 if (name) { td.textContent = name; } else { td.rowSpan = 5; td.textContent = '渠际时\n陈海峰\n梁胜玉\n袁凯\n侯博文\n孙逍遥\n郭智豪\n杨沐松'; } if (year && month) { if (shift === undefined) { // 时间行 td.textContent = '行政班'; } td.appendChild(document.createElement('br')); td.appendChild(document.createTextNode(year + '年' + month + '月')); td.appendChild(document.createElement('br')); td.appendChild(createDateInput(year, month)); td.appendChild(document.createElement('br')); td.appendChild(createWeekday(year, month)); } } return td; } // 生成表格内容 for (var i = 0; i < 8; i++) { var tr = document.createElement('tr'); for (var j = 0; j < 35; j++) { tr.appendChild(createCell(null, i == 0 ? true : false, year, month)); } table.tBodies[0].appendChild(tr); } // 提交保存按钮 var submitButton = document.getElementById('submit'); submitButton.addEventListener('click', function() { // 保存表格数据 }); ``` 在这个代码中,我们首先创建了年份和月份的选择框,并将它们添加到表格中。然后,我们使用`createCell`函数来动态生成表格中的单元格。在这个函数中,我们根据参数来决定单元格的内容和样式。如果`shift`参数不为空,则表示生成班次行,否则表示生成时间和日期行。如果`name`参数不为空,则表示生成人名行的单元格,否则表示生成时间和日期行的单元格。最后,我们使用`createCell`函数来生成表格中的所有单元格,并将它们添加到表格中。 最后,我们在页面底部添加了一个提交保存按钮,并使用事件监听器来处理点击事件。在这个事件处理函数中,我们可以获取表格中的数据,并将它们保存到服务器或本地存储中。 这个实现方案可能还有很多需要改进的地方,比如表格样式、输入校验、数据格式等等。但是,我相信这个代码可以帮助你快速实现你的需求。

最新推荐

recommend-type

android手机应用源码Imsdroid语音视频通话源码.rar

android手机应用源码Imsdroid语音视频通话源码.rar
recommend-type

营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx

营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx
recommend-type

JavaScript_超过100种语言的纯Javascript OCR.zip

JavaScript
recommend-type

JavaScript_跨平台React UI包.zip

JavaScript
recommend-type

node-v16.17.0-headers.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。