本文实例讲述了jQuery简单实现日历的方法。分享给大家供大家参考。具体分析如下:
原理挺简单的,首先算出一个月有多少天,再算出这个月的第一天是星期几,接着顺序排下来就可以了.
<!DOCTYPE HTML> <html lang=\"zh-CN\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;\" /> <meta name=\"format-detection\" content=\"telephone=no\" /> <title>tryMyOwnCalendar</title> <script src=\"js/jquery.min.js\" language=\"javascript\"></script> <style> *{ margin:0; padding:0;} .choosecal{ width:96%; margin:3% auto; overflow:hidden;} .ccaltop{ width:100%; border-radius:5px; } .caltline1,.caltline2{ width:94%; background-color:#F90; overflow:hidden; padding:2% 3%;} .caltline1 p,.caltline2 p{ float:left; width:10%; font-weight:700; text-align:right;} .caltline1 .bookdate{ width:90%; text-align:left;} .caltline2{ background-color:#FFF; display:none;} .caltline2 p{ width:20%;} .caltline2 .datetext{ width:35%; border:1px solid #000; background-color:#FFF; font-weight:700;} .inputdate{ color:#F60;} .calender{ width:100%; margin-top:3%; overflow:hidden; display:none;} .selectmouth{ background-color:#F30; width:94%; overflow:hidden;padding:2% 3%;border-radius:5px 5px 0 0;} .selectmouth p{ float:left; width:33%; color:#FFF; font-weight:700; cursor:pointer;} .selectmouth .selectdate{ width:100%; background-color:#F30; border:none; color:#FFF; font-weight:700; text-align:center;} .data_table{ width:100%;border:1px solid #cccccc; border-collapse:collapse; } .data_table thead{ background-color:#333;} .data_table thead td{ color:#FFF; text-align:center; border:1px solid #333;border-collapse:collapse; padding:1% 0; } .data_table tbody td{border:1px solid #cccccc; border-collapse:collapse; text-align:center;color:#0C6;padding:1% 0; } .data_table tbody td.orderdate{ color:#000;} .data_table tbody td.tdselect{ color:#fff;background-color:#999} </style> </head> <body> <div class=\"choosecal\"> <div class=\"ccaltop\"> <div class=\"caltline1\"> <p class=\"bookdate\">选择入住日期……</p> <p><img src=\"images/next.png\" /></p> </div> <div class=\"caltline2\"> <p style=\" width:80%; text-align:left;\"> <input type=\"text\" value=\"\" class=\"datetext datetoday inputdate\" readonly=readonly /> 至 <input type=\"text\" value=\"\" class=\"datetext dateendday\" readonly=readonly /> </p> <p><input type=\"button\" value=\"确定\" class=\"btsure\" /></p> </div> </div> <div class=\"calender\"> <div class=\"selectmouth\"> <p style=\"text-align:right\" class=\"lastmonth\"><</p> <p><input type=\"text\" class=\"selectdate\" value=\"2014年2月\" readonly=readonly /></p> <p class=\"nextmonth\">></p> </div> <table class=\"data_table\" cellspacing=\"0px\"> <thead> <tr> <td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td> </tr> </thead> <tbody> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> <tr> <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> </tr> </tbody> </table> </div> </div> <script> window.onload=function(){ var mydate=new Date(); var thisyear=mydate.getFullYear(); var thismonth=mydate.getMonth()+1; var thisday=mydate.getDate(); var mydate1=new Date(); var thisyear1=mydate1.getFullYear(); var thismonth1=mydate1.getMonth()+1; var thisday1=mydate1.getDate(); var selectday=thisday; //标记日期 var indate=thisday; //入住日期 var inmonth=thismonth; //入住月份 var outdate=thisday+1; //退房日期 var outmonth=thismonth; //退房月份 var datetxt=\"datetoday\"; var datefirst; var datesecond; function initdata(){ //日期初始填充 var tdheight=jQuery(\".data_table tbody tr\").eq(0).find(\"td\").height(); jQuery(\".data_table tbody td\").css(\"height\",tdheight); jQuery(\".selectdate\").val(thisyear+\"年\"+thismonth+\"月\"); var days=getdaysinonemonth(thisyear,thismonth); var weekday=getfirstday(thisyear,thismonth); setcalender(days,weekday); markdate(thisyear,thismonth,selectday); orderabledate(thisyear,thismonth,thisday); } initdata(); jQuery(\".datetoday\").val(thisyear+\"-\"+thismonth+\"-\"+thisday); jQuery(\".dateendday\").val(thisyear+\"-\"+thismonth+\"-\"+(thisday+1)); function orderabledate(thisyear,thismonth,thisday){ //能预订的日期 if(thisyear<thisyear1){ jQuery(\".data_table tbody td\").addClass(\"orderdate\"); jQuery(\".data_table tbody td\").removeClass(\"usedate\"); }else if(thisyear==thisyear1){ if(thismonth<thismonth1){ jQuery(\".data_table tbody td\").addClass(\"orderdate\"); jQuery(\".data_table tbody td\").removeClass(\"usedate\"); }else if(thismonth==thismonth1){ for(var j=0;j<6;j++){ for(var i=0;i<7;i++){ var tdhtml=jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).html(); if(tdhtml<thisday){ jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).addClass(\"orderdate\"); jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).removeClass(\"usedate\"); }else{ jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).removeClass(\"orderdate\"); } } } }else{ jQuery(\".data_table tbody td\").removeClass(\"orderdate\"); } }else{ jQuery(\".data_table tbody td\").removeClass(\"orderdate\"); } } function markdate(thisyear,thismonth,thisday){ //标记日期 var datetxt=thisyear+\"年\"+thismonth+\"月\"; var thisdatetxt=thisyear1+\"年\"+thismonth1+\"月\"; jQuery(\".data_table td\").removeClass(\"tdselect\"); if(datetxt==thisdatetxt){ for(var j=0;j<6;j++){ for(var i=0;i<7;i++){ var tdhtml=jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).html(); if(tdhtml==thisday){ jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).addClass(\"tdselect\"); } } } } } function getdaysinonemonth(year,month){ //算某个月的总天数 month=parseInt(month,10); var d=new Date(year,month,0); return d.getDate(); } function getfirstday(year,month){ //算某个月的第一天是星期几 month=month-1; var d=new Date(year,month,1); return d.getDay(); } function setcalender(days,weekday){ //往日历中填入日期 var a=1; for(var j=0;j<6;j++){ for(var i=0;i<7;i++){ if(j==0&&i<weekday){ jQuery(\".data_table tbody tr\").eq(0).find(\"td\").eq(i).html(\"\"); jQuery(\".data_table tbody tr\").eq(0).find(\"td\").eq(i).removeClass(\"usedate\"); }else{ if(a<=days){ jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).html(a); jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).addClass(\"usedate\"); a++; }else{ jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).html(\"\"); jQuery(\".data_table tbody tr\").eq(j).find(\"td\").eq(i).removeClass(\"usedate\"); a=days+1; } } } } } function errorreset(){ //日期报错后,数据重置 thisyear=thisyear1; thismonth=thismonth1; thisday=thisday1; selectday=thisday1; indate=thisday1; inmonth=thismonth1; outdate=thisday1+1; outmonth=thismonth1; initdata(); } jQuery(\".data_table tbody td.usedate\").live(\"click\",function(){ //点击日期的效果 var thishtml=parseInt(jQuery(this).html()); jQuery(\".data_table td\").removeClass(\"tdselect\"); jQuery(this).addClass(\"tdselect\"); selectday=thishtml; if(datetxt==\"datetoday\"){ jQuery(\".datetoday\").val(thisyear+\"-\"+thismonth+\"-\"+selectday); indate=selectday; inmonth=thismonth; }else{ jQuery(\".dateendday\").val(thisyear+\"-\"+thismonth+\"-\"+selectday); outdate=selectday; outmonth=thismonth; if(outmonth<inmonth){ alert(\"日期填写错误\"); jQuery(\".datetoday\").val(thisyear1+\"-\"+thismonth1+\"-\"+thisday1); jQuery(\".dateendday\").val(thisyear1+\"-\"+thismonth1+\"-\"+(thisday1+1)); errorreset(); }else if(outmonth==inmonth){ if(outdate<=indate){ alert(\"日期填写错误\"); jQuery(\".datetoday\").val(thisyear1+\"-\"+thismonth1+\"-\"+thisday1); jQuery(\".dateendday\").val(thisyear1+\"-\"+thismonth1+\"-\"+(thisday1+1)); errorreset(); } } } }); jQuery(\".datetoday\").click(function(){ //选择入住日期 datetxt=\"datetoday\"; jQuery(\".datetext\").removeClass(\"inputdate\"); jQuery(this).addClass(\"inputdate\"); }); jQuery(\".dateendday\").click(function(){ //选择退房日期 datetxt=\"dateendday\"; jQuery(\".datetext\").removeClass(\"inputdate\"); jQuery(this).addClass(\"inputdate\"); }); jQuery(\".lastmonth\").click(function(){ //上一个月 thismonth--; if(thismonth==0){ thismonth=12; thisyear--; } initdata(); }); jQuery(\".nextmonth\").click(function(){ //上一个月 thismonth++; if(thismonth==13){ thismonth=1; thisyear++; } initdata(); }); jQuery(\".btsure\").click(function(){ //确定日期 var start = new Date($(\".datetoday\").val()); var end = new Date($(\".dateendday\").val()); var diff = parseInt((end - start) / (1000*3600*24)); jQuery(\".bookdate\").html(inmonth+\"月\"+indate+\"日至\"+outmonth+\"月\"+outdate+\"日(\"+diff+\")晚\") }); jQuery(\".caltline1\").toggle( function(){ jQuery(\".caltline2\").slideDown(500); jQuery(\".calender\").fadeIn(500); errorreset(); jQuery(\".caltline1\").find(\"img\").attr(\"src\",\"images/iconpointup.png\"); }, function(){ jQuery(\".caltline2\").slideUp(500); jQuery(\".calender\").fadeOut(500); jQuery(\".caltline1\").find(\"img\").attr(\"src\",\"images/iconpoint.png\"); } ); } </script> </body> </html>
希望本文所述对大家的jQuery程序设计有所帮助。
本文地址:https://www.stayed.cn/item/21973
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我