纯JavaScript实现的日历控件

0 下载量 60 浏览量 更新于2024-09-01 收藏 60KB PDF 举报
"纯javascript版日历控件的实现与解析" 在网页开发中,日历控件是一种常见的交互元素,常用于输入日期或者展示日期选择。本篇将详细介绍一个纯JavaScript实现的日历控件,无需依赖任何外部库,如jQuery等。开发者只需引用`calendar.js`文件,并将input元素的id设置为`calendar`,即可将文本框转化为一个功能完备的日历选择器。 首先,我们需要在HTML中引入`calendar.js`。在`<head>`部分添加如下代码: ```html <!doctype html> <html> <head> <meta charset="utf-8"> <title>日历控件</title> <script src="js/calendar.js" defer></script> </head> ``` 这里的`defer`属性确保`calendar.js`在页面加载完成后,但在`<body>`元素内的脚本执行之前被解析和执行。 接下来,在`<body>`部分创建一个input元素,为其设置id为`calendar`,如下所示: ```html <body> <input id="calendar" type="text" /> </body> ``` `calendar.js`的核心代码如下: 1. 定义了一些必要的变量,如一周的天数(days)、当前日期(today)、大月和小月的数组(month_big和month_small),以及日期分隔符(separator)。 2. 获取与日历控件相关的DOM元素,包括日历控件本身(calendar)、其父元素(cal_parent),以及控件的宽度(cal_width)、高度(cal_height)、相对于父元素的左边距(cal_X)和上边距(cal_Y)。这些值用于创建日历显示的位置和大小。 3. 创建并显示日历面板的逻辑,这部分包括计算月份的天数、绘制日历表格、处理用户点击事件等。这部分代码没有在提供的片段中完整展示,但通常会包括以下步骤: - 计算当前月份的天数,根据大月和小月规则。 - 创建一个二维数组表示日历表格,每个单元格代表一天。 - 将日历表格插入到页面中,可能是一个`<table>`元素,每个单元格是`<td>`元素。 - 添加事件监听器,使用户能够通过点击日历上的日期来选择日期,并将选中的日期显示在input元素中。 这个纯JavaScript日历控件的实现方式虽然简单,但可以作为一个基础模板,根据实际需求进行扩展,比如添加日期限制、多语言支持、自定义样式等功能。对于初学者来说,这是一个很好的学习JavaScript DOM操作、事件处理和日期处理的实践项目。对于有经验的开发者,它可以作为快速集成到现有项目中的轻量级解决方案。
2010-03-24 上传
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> //创建一个数组,用于存放每个月的天数 function montharr(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11)  { this[0] = m0; this[1] = m1; this[2] = m2; this[3] = m3; this[4] = m4; this[5] = m5; this[6] = m6; this[7] = m7; this[8] = m8; this[9] = m9; this[10] = m10; this[11] = m11; } //实现月历 function calendar() { var monthNames = "JanFebMarAprMayJunJulAugSepOctNovDec"; var today = new Date(); var thisDay; var monthDays = new montharr(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); year = today.getYear() +1900; thisDay = today.getDate(); if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) monthDays[1] = 29; nDays = monthDays[today.getMonth()]; firstDay = today; firstDay.setDate(1); testMe = firstDay.getDate(); if (testMe == 2) firstDay.setDate(0); startDay = firstDay.getDay(); document.write("
")  document.write("") document.write("
"); document.write(""); document.writeln(""); document.writeln(""); document.writeln(""); document.writeln(""); document.writeln(""); document.writeln(""); document.writeln(""); column = 0; for (i=0; i<startDay; i++) { document.writeln("\n"); column++; } for (i=1; i<=nDays; i++) { if (i == thisDay) { document.writeln("") column++; if (column == 7) { document.writeln("");  column = 0; } } document.writeln("
"); var dayNames = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六"); var monthNames = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); var now = new Date(); document.writeln("" + "公元 " + now.getYear() + "年" + monthNames[now.getMonth()] + " " + now.getDate() + "日 " + dayNames[now.getDay()] + ""); document.writeln("
") } else { document.writeln(""); } document.writeln(i); if (i == thisDay) document.writeln("
") document.writeln("<FORM NAME='clock' onSubmit='0'>") document.writeln(" 现在时间:<INPUT TYPE='Text' NAME='face' ALIGN='TOP'></FORM>
") document.writeln("
"); } </SCRIPT>