jQuery 联动日历实现代码_jquery

来看下效果图

一、先来说下功能:

1.点击“确定”显示日历
2。再次点击隐藏,或从DOM中删除这个日历。如些反复第一,和第二这两步。
3.让日历中显示当前月份日期(多少天,每天是多少号)。
4.让当前月份的日期和星期几对应.
5.让左边两边的日历关联起来。

二、再来说下HTML结构。

1.上面蓝色的是一个DIV,显示当前月分,和上月,下月。
2.下面的日期和星期,是用一个table结构存放数据。星期用thead,日期用:tbody存放。

三、功能展开分析:

3.1、前两个功能?
  让我想起使用JQUERY里面的toggle。很方便就可以解决。

3.2、让日历中显示当前月份日期数?
  既然跟日期有关的,肯定会想起Deta这个对象了。在这个对象中,我们可以获取或设某年,某天,某月,某日,某星期几。但就是不能直接获取这一个月中有多少天。?怎么办呢?
  所以我们只能用判断了。根据当前月份的数值。来把天数存到一个变量当中。(对象获取到的当前月份要+1。国它是从零开始计算的).
  比如现在是五月,根据判断,五月是大,所以变量中就存31这个数值;即这个月有31天。

3.3、让当前月份的日期和星期几对应.??
  这个问题,解决办法就是,获取到当月一号,对应的星期几。后面的就可以依次排列下去了。这里的依次排列,我理解的是,因为存放日期的都是TD标签,在TBODY里面这些TD的索引,都是排列好的,所以把一号插入到那个TD当中,后面的二号,就会插入到后一个TD当中了。

3.4、让左边两边的日历关联起来。

  这里重点是“关联”:我最近写了“倒计时”,再就是这次的"联动日历",还有让我想起了“联动下拉菜单”,比如省份和市的联动下拉菜单;这些都涉汲到“联动”.
  我总结了一下,就是需要“联动”的东西,必定有一个“点”(先这么叫吧),其它需要变化,都要和这个点相关联起来,这样改变这个点,其它和这个点关联的东西,也就都会发生改变,也就实现了“联动”这一效果。

  比如,上次的“倒计时”,里面的“点”,就是当前时间和设定以后时间,之前相差的"总毫秒数"。倒计时显示的,时,分,秒,都和这个"总毫秒数"有关联,只要这个“总毫秒数”变化,那么时,分,秒,都会变化,这就是"联动"了.

  这次的日历联动,里面的"点",就是当前创建日期对象后,获得的年,月。根据这个年,月,来去设置右边,即下个月该显示的东西。那么只要当前获取的年,月,有变化,后面的自然也会变化。也就“联动”了。
  当然里面还是有点小多细节,处理。

四、上代码,太长了,所以只放了结构,里面的内容可以下载文章最后的DEMO

复制代码 代码如下:

$(function(){
var nowDate = $(".nowDate"), //左边的日历盒子
nextDate = $(".nextDate"), //右边的日历盒子
lstrTd = "", //左日期的行的DOM结构
rstrTd = "", //右日期的行的DOM结构
lrows = 0, //左日期行数
rrows = 0, //右日期行数
iHtmlNow = "", //左边的日历结构
iHtmlNext = "", //右边的日历的结构
nowTitleDateY = "", //左边标题年份
nowTitleDateM = "", //左边显示的月份
nowlastM = "", //左边的翻月显示
nextTitleDateY = "", //右边标题年份
nextTitleDateM = "", //右边显示的月份
nextLastM = "", //右边的翻月显示
creatbtu = true, //只创建一次HTML结构的开关
NumDay = 0, //左边每个月的天数;
rNumDay = 0, //左边每个月的天数;
lfday = 0, //左边当前月份的第一天,是星期几
rfday = 0; //右边当前月份的第一天,是星期几
//创建日期行
function creatTr(l,r){
}
/*创建当前和下一个月的日期和年份
*这里分三种情况,当前月为12月 当前月为11月,当前月为1月
*/
function getTitleDate(){
var odate = new Date();
//如果当前月是12月分,那么右边的月份,就应该是1月份
//如果当前月是11月分,那么右边的月份,就应该是1月份
//如果当前月是1月分,那么左边的月份,就应该是12月份
}
/*获取当前月份的一号,是星期几
*首先设置你创建日期对象的年份,月份,和你需要知道的日期数,把这些设置好之后,再使用getDay()方法,就可以获取你设置日期的,星期数了;
*/
function getfirstD(m1,y1,m2,y2){
}
//根据大小月份取得天数
function getTdDay(m1,y1,m2,y2){
}
//根据传入的年份参数,判断是否是润年,即能够被4整除,但不能被100整除,同时满足时;或者能被400整除;
function isRunYear(y){
}
//创建HMTL结构
function creatHtml(creatbtu){
//根据当前月份的一号是星期几,来生成有几行存放所有日期
}
//将日期插入到对应的TD当中
function insertdate(d,t){
//插入到左边
//插入到边
}
//插入到DOM
function insertHtml(){
}
//从DOM中删除
function delHtml(){
}
//点击确定显示或隐藏日历
$("input[type=button]").toggle(function(){
//加这个判断是防止连续点击确定按钮
if(!nowDate.add(nextDate).is(":animated")&&nowDate.add(nextDate).is(":empty")){
//获得标题上面的年份和月份
getTitleDate();
//获得左和右的月份的天数
getTdDay(nowTitleDateM,nowTitleDateY,nextTitleDateM,nextTitleDateY);
//获得左和右的月份一号是星期几
getfirstD(nowTitleDateM,nowTitleDateY,nextTitleDateM,nextTitleDateY);
//创建HTML结构
creatHtml();
//将结构插入到DOM当中
insertHtml();
//插入日期到左和右的表格TD当中
insertdate(lfday,rfday);
//展开日期
nowDate.add(nextDate).slideDown(200);
}
},function(){
//加这个判断是防止连续点击
if(!nowDate.add(nextDate).is(":animated")){
//收起日历
nowDate.add(nextDate).slideUp(200);
//从DOM中删除日历结构
delHtml();
}
});
})

4.1分析下这代码结构看注解就可以明白的,以下几个步骤:
  1.获得当前年份,月份(联动的“点”)
  2.获得左边和右边对应月份的天数;
  3.获得左边和右边月分当中一号,分别对应的是星期几
  4.有了以上东西,我们就可以创建HTML结构了(因为要根据月份当中的日期排列,来决定,创建五行,还是六行。来显示日期)
  5.将创建好的结构,插入到DOM当中
  6.再将获得的天数,也就是日期数,插入到对应的表格存放日期的TD当中;

五、总结

  1.不用把TR分行处理,只接把tbody里面的td做为一个整体的数组,往里面插入数据;(因为显示的是数字,正好可以和)

  2.“联动”的规则

  3.像这种类似插入很多数据的东西,要用循解决。

  4。像这种数据多的,应该先存放到数组中(因为本例显示的是数字,所以可以直接用循环里面的变量,如果是值,要先存放到数组中,根据索引取出来)

在线演示:http://demo.jb51.net/js/2012/mycalendar/
DEMO下载:mycalendar_jb51.rar

时间: 2024-08-02 12:54:24

jQuery 联动日历实现代码_jquery的相关文章

jQuery联动日历的实例解析_jquery

一.要实现的功能: 1.点击上面的箭头,切换至上一个月,或下一个月,并且是联动的. 2.只要不是现实中的当月,那么显示的日期,都是灰色底. 二.分析: 1.当我们点击切换日期的箭头时,要改变顶部蓝色的年份和日期. 2.当我们点击切换日期的箭头时,下面TD的日期也要和上面显示的月份对应起来. 3.用一个判断,是否现实中的当月,来控制TD的背景色,是否为灰色 DEMO下载 //点击更新前一个月 $(".pre").live("click",function(){ now

基于jquery实现日历签到功能_jquery

在一些任务游戏.贴吧管理中都会有一个签到功能,帮助大家记录登录天数,积累等级经验,这个日历签到功能是如何实现的,本文为大家进行演. 本文实例讲述了基于jquery实现日历签到功能.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml

Jquery焦点图实例代码_jquery

本文实例讲述了Jquery焦点图实例代码.分享给大家供大家参考.具体如下: 对于很多建站的朋友来讲,焦点图并不陌生,一般的企业站,门户站都会用到焦点图.我们平时在写html代码的时候,很多人为了省时省力,对于焦点图都是在网上下载一些人家写好的代码,直接套上去即可,很多时候我自己也是这样来的.因为一个焦点图有html布局,css样式调试和最关键的 javascript语句的编写.这些都是一个很麻烦的过程. 今天我就以实例讲解,手把手教你如何写Jquery焦点图.Jquery是js封装的框架,让js

自制轻量级仿jQuery.boxy对话框插件代码_jquery

对此,jquery.boxy插件已经做得非常强大了,常用的提示.确认,拖拽.改变大小.异步加载都非常实用,导致文件较大(可忽略不计),很多功能并不需要,为此,抱着在边学边实践的态度和想法,自制一款适用于本项目的轻量级弹出层插件,这是第一次写jqeury插件,也为了以后能将常用操作封装为jquery插件做准备吧. 首先来个插件名字,这样才能去唬人,就叫jquey.cvbox.min.js吧,cv就是网站域名ChinaValue的缩写,压缩后的容量控制在6K以下.因为还未完成,所以先将思想记录下来.

jQuery自定义数值抽奖活动代码_jquery

本文实例为大家分享了jquery输入数字随机抽奖特效代码,供大家参考,具体内容如下 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jQuery自定义数值抽奖活动代码 - 何问起</title><base target="_blank" /> <script type="text/ja

jQuery 页面 Mask实现代码_jquery

在 Ajax 应用中,显示一个 Dialog(以 Div 方式显示)前,都会先建一个 Mask.因为经常会用到,所以写成了一个 jQuery 插件,方便自己的使用. 复制代码 代码如下: (function($){ $.extend({ documentMask: function(options){ // 扩展参数 var op = $.extend({ opacity: 0.8, z: 10000, bgcolor: '#000' }, options); // 创建一个 Mask 层,追加

jquery实现滑动特效代码_jquery

在项目中,有需求要使用jquery实现滑动效果,于是把相关内容整理如下,下文介绍了很详细,有文字说明和代码分析,需要的朋友可以来学习下. 实现方式一:  .slideUp([duration][,complete])--目标元素向上滑入隐藏: .slideDown([duration][,complete])--目标元素向下滑出显示: .slideToggle([duration][,complete])--目标元素隐藏则向下滑出显示,否则向上滑入隐藏:注:duration为方法执行的时间区间,

jQuery遍历Form示例代码_jquery

jQuery 遍历 Form,代码如下 复制代码 代码如下: <script type="text/javascript"> // 取得 id 为form1 的 form 的所有输入变量 values = $("#form1").serializeArray(); var values, index; for (index = 0; index < values.length; ++index) { if (values[index].name =

基于jquery的二级联动菜单实现代码_jquery

jQuery 1.3.2 简单实现select二级联动 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head