本文实例讲述了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程序设计有所帮助。
新闻热点
疑难解答
图片精选