首页 > 语言 > JavaScript > 正文

jQuery简单实现日历的方法

2024-05-06 16:19:16
字体:
来源:转载
供稿:网友

本文实例讲述了jQuery简单实现日历的方法。分享给大家供大家参考。具体分析如下:

原理挺简单的,首先算出一个月有多少天,再算出这个月的第一天是星期几,接着顺序排下来就可以了.

 

 
  1. <!DOCTYPE HTML> 
  2. <html lang="zh-CN"
  3. <head> 
  4. <meta charset="utf-8"
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" /> 
  6. <meta name="format-detection" content="telephone=no" /> 
  7. <title>tryMyOwnCalendar</title> 
  8. <script src="js/jquery.min.js" language="javascript"></script> 
  9. <style> 
  10. *{ margin:0; padding:0;} 
  11. .choosecal{ width:96%; margin:3% auto; overflow:hidden;} 
  12. .ccaltop{ width:100%; border-radius:5px; } 
  13. .caltline1,.caltline2{ width:94%; background-color:#F90; overflow:hidden; padding:2% 3%;} 
  14. .caltline1 p,.caltline2 p{ float:left; width:10%; font-weight:700; text-align:right;} 
  15. .caltline1 .bookdate{ width:90%; text-align:left;} 
  16. .caltline2{ background-color:#FFF; display:none;} 
  17. .caltline2 p{ width:20%;} 
  18. .caltline2 .datetext{ width:35%; border:1px solid #000;  
  19. background-color:#FFF; font-weight:700;} 
  20. .inputdate{ color:#F60;} 
  21. .calender{ width:100%; margin-top:3%; overflow:hidden; display:none;} 
  22. .selectmouth{ background-color:#F30; width:94%;  
  23. overflow:hidden;padding:2% 3%;border-radius:5px 5px 0 0;} 
  24. .selectmouth p{ float:left; width:33%; color:#FFF; 
  25. font-weight:700; cursor:pointer;} 
  26. .selectmouth .selectdate{ width:100%; background-color:#F30;  
  27. border:none; color:#FFF; font-weight:700; text-align:center;}  
  28. .data_table{ width:100%;border:1px solid #cccccc; 
  29. border-collapse:collapse; } 
  30. .data_table thead{ background-color:#333;} 
  31. .data_table thead td{ color:#FFF; text-align:center; 
  32. border:1px solid #333;border-collapse:collapse; padding:1% 0; 
  33. .data_table tbody td{border:1px solid #cccccc; 
  34. border-collapse:collapse; 
  35. text-align:center;color:#0C6;padding:1% 0; 
  36. .data_table tbody td.orderdate{ color:#000;} 
  37. .data_table tbody td.tdselect{ color:#fff;background-color:#999} 
  38. </style> 
  39. </head> 
  40. <body> 
  41. <div class="choosecal"
  42. <div class="ccaltop"
  43. <div class="caltline1"
  44. <p class="bookdate">选择入住日期……</p> 
  45. <p><img src="images/next.png" /></p> 
  46. </div> 
  47. <div class="caltline2"
  48. <p style=" width:80%; text-align:left;"
  49. <input type="text" value="" 
  50. class="datetext datetoday inputdate" readonly=readonly /> 
  51. 至 
  52. <input type="text" value="" class="datetext dateendday" 
  53. readonly=readonly /> 
  54. </p> 
  55. <p><input type="button" value="确定" class="btsure" /></p> 
  56. </div> 
  57. </div> 
  58. <div class="calender"
  59. <div class="selectmouth"
  60. <p style="text-align:right" class="lastmonth"><</p> 
  61. <p><input type="text" class="selectdate" value="2014年2月" readonly=readonly /></p> 
  62. <p class="nextmonth">></p> 
  63. </div> 
  64. <table class="data_table" cellspacing="0px"
  65. <thead> 
  66. <tr> 
  67. <td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td> 
  68. </tr> 
  69. </thead> 
  70. <tbody> 
  71. <tr> 
  72. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  73. </tr> 
  74. <tr> 
  75. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  76. </tr> 
  77. <tr> 
  78. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  79. </tr> 
  80. <tr> 
  81. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  82. </tr> 
  83. <tr> 
  84. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  85. </tr> 
  86. <tr> 
  87. <td>1</td><td></td><td></td><td></td><td></td><td></td><td></td> 
  88. </tr> 
  89. </tbody> 
  90. </table> 
  91. </div> 
  92. </div> 
  93. <script> 
  94. window.onload=function(){ 
  95. var mydate=new Date(); 
  96. var thisyear=mydate.getFullYear(); 
  97. var thismonth=mydate.getMonth()+1; 
  98. var thisday=mydate.getDate(); 
  99. var mydate1=new Date(); 
  100. var thisyear1=mydate1.getFullYear(); 
  101. var thismonth1=mydate1.getMonth()+1; 
  102. var thisday1=mydate1.getDate(); 
  103. var selectday=thisday;  
  104. //标记日期 
  105. var indate=thisday;  
  106. //入住日期 
  107. var inmonth=thismonth;  
  108. //入住月份 
  109. var outdate=thisday+1;  
  110. //退房日期 
  111. var outmonth=thismonth;  
  112. //退房月份 
  113. var datetxt="datetoday";  
  114. var datefirst; 
  115. var datesecond; 
  116. function initdata(){  
  117. //日期初始填充 
  118. var tdheight=jQuery(".data_table tbody tr").eq(0).find("td").height(); 
  119. jQuery(".data_table tbody td").css("height",tdheight); 
  120. jQuery(".selectdate").val(thisyear+"年"+thismonth+"月"); 
  121. var days=getdaysinonemonth(thisyear,thismonth); 
  122. var weekday=getfirstday(thisyear,thismonth); 
  123. setcalender(days,weekday);  
  124. markdate(thisyear,thismonth,selectday); 
  125. orderabledate(thisyear,thismonth,thisday); 
  126. initdata(); 
  127. jQuery(".datetoday").val(thisyear+"-"+thismonth+"-"+thisday); 
  128. jQuery(".dateendday").val(thisyear+"-"+thismonth+"-"+(thisday+1)); 
  129. function orderabledate(thisyear,thismonth,thisday){  
  130. //能预订的日期 
  131. if(thisyear<thisyear1){ 
  132. jQuery(".data_table tbody td").addClass("orderdate"); 
  133. jQuery(".data_table tbody td").removeClass("usedate"); 
  134. }else if(thisyear==thisyear1){ 
  135. if(thismonth<thismonth1){ 
  136. jQuery(".data_table tbody td").addClass("orderdate"); 
  137. jQuery(".data_table tbody td").removeClass("usedate"); 
  138. }else if(thismonth==thismonth1){ 
  139. for(var j=0;j<6;j++){ 
  140. for(var i=0;i<7;i++){ 
  141. var tdhtml=jQuery(".data_table tbody tr").eq(j).find("td").eq(i).html(); 
  142. if(tdhtml<thisday){ 
  143. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).addClass("orderdate"); 
  144. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).removeClass("usedate"); 
  145. }else
  146. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).removeClass("orderdate"); 
  147. }else
  148. jQuery(".data_table tbody td").removeClass("orderdate"); 
  149. }else
  150. jQuery(".data_table tbody td").removeClass("orderdate"); 
  151. function markdate(thisyear,thismonth,thisday){  
  152. //标记日期 
  153. var datetxt=thisyear+"年"+thismonth+"月"
  154. var thisdatetxt=thisyear1+"年"+thismonth1+"月"
  155. jQuery(".data_table td").removeClass("tdselect"); 
  156. if(datetxt==thisdatetxt){ 
  157. for(var j=0;j<6;j++){ 
  158. for(var i=0;i<7;i++){ 
  159. var tdhtml=jQuery(".data_table tbody tr").eq(j).find("td").eq(i).html(); 
  160. if(tdhtml==thisday){ 
  161. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).addClass("tdselect"); 
  162. function getdaysinonemonth(year,month){  
  163. //算某个月的总天数 
  164. month=parseInt(month,10); 
  165. var d=new Date(year,month,0); 
  166. return d.getDate(); 
  167. function getfirstday(year,month){  
  168. //算某个月的第一天是星期几 
  169. month=month-1; 
  170. var d=new Date(year,month,1); 
  171. return d.getDay(); 
  172. function setcalender(days,weekday){  
  173. //往日历中填入日期 
  174. var a=1; 
  175. for(var j=0;j<6;j++){ 
  176. for(var i=0;i<7;i++){ 
  177. if(j==0&&i<weekday){ 
  178. jQuery(".data_table tbody tr").eq(0).find("td").eq(i).html(""); 
  179. jQuery(".data_table tbody tr").eq(0).find("td").eq(i).removeClass("usedate"); 
  180. }else
  181. if(a<=days){ 
  182. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).html(a); 
  183. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).addClass("usedate"); 
  184. a++; 
  185. }else
  186. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).html(""); 
  187. jQuery(".data_table tbody tr").eq(j).find("td").eq(i).removeClass("usedate"); 
  188. a=days+1; 
  189. function errorreset(){  
  190. //日期报错后,数据重置 
  191. thisyear=thisyear1; 
  192. thismonth=thismonth1; 
  193. thisday=thisday1; 
  194. selectday=thisday1; 
  195. indate=thisday1; 
  196. inmonth=thismonth1; 
  197. outdate=thisday1+1; 
  198. outmonth=thismonth1; 
  199. initdata(); 
  200. jQuery(".data_table tbody td.usedate").live("click",function(){ //点击日期的效果 
  201. var thishtml=parseInt(jQuery(this).html()); 
  202. jQuery(".data_table td").removeClass("tdselect"); 
  203. jQuery(this).addClass("tdselect"); 
  204. selectday=thishtml; 
  205. if(datetxt=="datetoday"){ 
  206. jQuery(".datetoday").val(thisyear+"-"+thismonth+"-"+selectday); 
  207. indate=selectday; 
  208. inmonth=thismonth; 
  209. }else
  210. jQuery(".dateendday").val(thisyear+"-"+thismonth+"-"+selectday); 
  211. outdate=selectday; 
  212. outmonth=thismonth; 
  213. if(outmonth<inmonth){ 
  214. alert("日期填写错误"); 
  215. jQuery(".datetoday").val(thisyear1+"-"+thismonth1+"-"+thisday1); 
  216. jQuery(".dateendday").val(thisyear1+"-"+thismonth1+"-"+(thisday1+1)); 
  217. errorreset(); 
  218. }else if(outmonth==inmonth){ 
  219. if(outdate<=indate){ 
  220. alert("日期填写错误"); 
  221. jQuery(".datetoday").val(thisyear1+"-"+thismonth1+"-"+thisday1); 
  222. jQuery(".dateendday").val(thisyear1+"-"+thismonth1+"-"+(thisday1+1)); 
  223. errorreset(); 
  224. }); 
  225. jQuery(".datetoday").click(function(){  
  226. //选择入住日期 
  227. datetxt="datetoday"
  228. jQuery(".datetext").removeClass("inputdate"); 
  229. jQuery(this).addClass("inputdate"); 
  230. }); 
  231. jQuery(".dateendday").click(function(){  
  232. //选择退房日期 
  233. datetxt="dateendday"
  234. jQuery(".datetext").removeClass("inputdate"); 
  235. jQuery(this).addClass("inputdate"); 
  236. }); 
  237. jQuery(".lastmonth").click(function(){  
  238. //上一个月 
  239. thismonth--; 
  240. if(thismonth==0){ 
  241. thismonth=12; 
  242. thisyear--; 
  243. initdata(); 
  244. }); 
  245. jQuery(".nextmonth").click(function(){  
  246. //上一个月 
  247. thismonth++; 
  248. if(thismonth==13){ 
  249. thismonth=1; 
  250. thisyear++; 
  251. initdata(); 
  252. }); 
  253. jQuery(".btsure").click(function(){  
  254. //确定日期 
  255. var start = new Date($(".datetoday").val());  
  256. var end = new Date($(".dateendday").val());  
  257. var diff = parseInt((end - start) / (1000*3600*24));  
  258. jQuery(".bookdate").html(inmonth+"月"+indate+"日至"+outmonth+"月"+outdate+"日("+diff+")晚"
  259. }); 
  260. jQuery(".caltline1").toggle( 
  261. function(){ 
  262. jQuery(".caltline2").slideDown(500); 
  263. jQuery(".calender").fadeIn(500); 
  264. errorreset(); 
  265. jQuery(".caltline1").find("img").attr("src","images/iconpointup.png"); 
  266. }, 
  267. function(){ 
  268. jQuery(".caltline2").slideUp(500); 
  269. jQuery(".calender").fadeOut(500); 
  270. jQuery(".caltline1").find("img").attr("src","images/iconpoint.png"); 
  271. ); 
  272. </script> 
  273. </body> 
  274. </html> 

希望本文所述对大家的jQuery程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选