js生成动态日历
效果图:



看代码:
- <html>
- <head>
- <title>动态日历</title>
- <style type="text/css">
- table{border:1px solid white;}
- thead tr{}
- thead tr td{text-align:center;}
- #calendar tr td{color: #000000;text-decoration: none;text-align:center;}
- </style>
- </head>
- <body>
- 年份:<select id="selYear" name="year" onchange="changeCalendar()"></select>
- 月份:<select id="selMonth" name="month" onchange="changeCalendar()"></select>
- <table width="100%" border="1" cellspacing="0" cellpadding="1">
- <thead>
- <tr>
- <td>Sunday</td>
- <td>Monday</td>
- <td>Tuesday</td>
- <td>Wednesday</td>
- <td>Thursday</td>
- <td>Friday</td>
- <td>Saturday</td>
- </tr>
- </thead>
- <tbody id="calendar"></tbody>
- </table>
- </body>
- <script type="text/javascript">
- (function(){
- var selYear = document.getElementById("selYear");
- var selMonth = document.getElementById("selMonth");
- var date = new Date();
- var year = date.getFullYear();
- var month = date.getMonth() + 1;
- var day = date.getDate();
- //生成当前年往前推10往后推5的数据
- for(var i = year - 10,len = year + 5; i < len; i++){
- var opt = new Option(i + "年", i);
- if(i == year) opt.selected = true;
- selYear.options.add(opt);
- }
- //生成月份数据
- for(var j = 1; j <= 12; j++){
- var m = j < 10 ? "0" + j : j;
- var opt = new Option(m + "月", m);
- if(j == month) opt.selected = true;
- selMonth.options.add(opt);
- }
- //显示当前月日历
- showCalendar(year, month);
- })();
- //得到每月的天数
- function getDaysOfMonth(year, month){
- if(year && month){
- if(month == 2){
- //2月闰年判断
- if((year % 4 == 0 && year % 100 !=0) || year % 400 == 0){
- return 29;
- }
- return 28;
- }
- var bigMonth = [1,3,5,7,8,10,12];
- var littleMonth = [4,6,9,11];
- for(var m in bigMonth){
- if(bigMonth[m] == month)
- return 31;
- }
- for(var m in littleMonth) {
- if(littleMonth[m] == month)
- return 30;
- }
- }
- }
- //根据年月生成日历
- function showCalendar(year, month){
- if(year && month){
- var tbody = document.getElementById("calendar");
- //生成前删除之前的行
- for(var i = 0,len =tbody.rows.length;i< len;i++){
- tbody.deleteRow();
- }
- var date = new Date(year, month - 1, 1);//month月的第一天
- var day = date.getDay();//星期
- var days = getDaysOfMonth(year, month);//month月的总天数
- var temp = Math.floor((days + day) / 7);
- var rows = (days + day) % 7 == 0 ? temp : (temp + 1);//要循环的行数
- var d = 1;
- for(var i = 1; i <= rows; i++){//循环行
- var tr = document.createElement("tr");
- for(var j = 1; j <= 7; j++){//循环列
- var td = document.createElement("td");
- //超过最大天数赋空
- if(d > days){
- td.innerHTML = "";
- tr.appendChild(td);
- continue;
- }
- if(i == 1){
- //第一行判断month月第一天是星期几,例如星期二前面空两个周日、周一
- if(j >= day + 1){
- var html = "<input type='checkbox' name='chkDay'>";
- td.innerHTML = html + (d < 10 ? "0" + d : d);
- d++;
- }else{
- td.innerHTML = "";
- }
- } else {
- var html = "<input type='checkbox' name='chkDay'>";
- td.innerHTML = html + (d < 10 ? "0" + d : d);
- d++;
- }
- tr.appendChild(td);
- }
- tbody.appendChild(tr);
- }
- }
- }
- function changeCalendar(){
- var y = document.getElementById("selYear").value;
- var m = document.getElementById("selMonth").value;
- showCalendar(y, m);
- }
- </script>
- </html>
js生成动态日历的更多相关文章
- js生成动态树状结构及排序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 利用scrapy-splash爬取JS生成的动态页面
目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...
- ABP项目中使用Swagger生成动态WebAPI
本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...
- 如何用python抓取js生成的数据 - SegmentFault
如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...
- 如何用phpcms将静态网页生成动态网页?
在前两篇随笔中已经简单介绍了phpcms,那么现在让我们来看一下如何用phpcms将静态网页生成动态网页? 1.在templates文件夹下新建模板文件夹ceshi(名字可以自己随笔起) 2.在ces ...
- js生成pdf报表
由于前台html已经动态生成报表,而且,前台有一个功能,一个date range组件,当你拖动的时候,报表会在不提交到后台的情况下动态变化.因此需要用到js生成生报表: 用到的组件: jquery.j ...
- js 生成二维码图片
1.用纯JavaScript实现的微信二维码图片生成器 QRCode.js是javascript实现二维码(QRCode)制作生成库. QRCode.js有着良好的跨浏览器兼容性(高版本使用HTML5 ...
- Selenium/HtmlUnit设置代理获取JS生成的网页
通常我们使用Java提供的HttpURLConnection或者Apache的HttpClient获取的网页源代码都是直观可见的,其代码的内容和通过浏览器右键网页->点击查看网页源代码的内容一致 ...
- js/jq 动态添加的元素不能触发绑定事件解决方案
<!-- Copyright 2017-10-27, Jachin QQ: 381558301 Email: 381558301@qq.com 请看看你们的版本并对号入座: jquery1.6版 ...
随机推荐
- bzoj 1875 [SDOI2009]HH去散步(矩乘)
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...
- Esper系列(二)时间窗口、长度窗口、cast、注解、自定义函数、静态方法
长度窗口实现原理图 说明: 上图长度窗口为5,事件W1至W5进入引擎后属于NewEvents队列,事件W6进入引擎后,W2至W6就属于NewEvents队列,而事件W1就属于OldEvents队列了. ...
- Oracle10g/11g 在SUSE/RHEL上的安装与配置
在过去对众多项目的支撑过程中,Oracle作为首选数据库,其安装与配置过程成了重复性最多的工作之一.在此,我进行了总结,并分享出来,希望能对大家有所帮助.随着Oracle版本的提升,从9i -> ...
- Kooboo CMS 介绍
Kooboo的定位是一个CMS,内容管理平台,从更严格意义上来说,它更应该网站快速开发平台.针对一般网站开发过程的分析和提炼,着重在解决网站的一般需求,提出一套快速开发网站的理念和方法.在这些理念和方 ...
- sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0
sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0 问题描述: 使用sqlplus客户端登录数据库,报 ...
- UVa 497 - Strategic Defense Initiative
题目:最大上升子序列.输出一组解. 分析:dp,LIS.数据较小 O(n^2)算法就可以. 设以第i个数字作为最大上升子序列中的最后一个数的长度为 f(i),则有转移方程: f(i)= max(f(j ...
- Xenomai 的模式切换浅析
在Xenomai的用户空间下,有两种模式:primary mode (主模式) 和 secondary mode(次模式). 在主模式下调用Linux系统调用后程序就会进入次模式,反之,在次模式下调用 ...
- IAP升级功能编写初期的一些困惑与疑问---完毕功能后的总结
IAP的源代码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...
- 如何编译libcurl
1. Android •1.1配置 •1.2 Make •1.3的参数配置 2.iOS 3.windows 4.关于头文件 注释 本文档介绍了如何为Android,iOS和Windows编译libcu ...
- How To Install Kernel 3.10 On Ubuntu, Linux Mint, Debian and Derivates
n this article I will show you how to install Linux Kernel 3.10 on Ubuntu 13.10 Saucy Salamander, Ub ...