本文实例讲述了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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我