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

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

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

图片精选