仿微博的JQuery日历控件

本文介绍了一个自定义的日历控件实现方法,该控件能够阻止用户选择未来的日期。通过JavaScript处理table元素来生成每个月的日期布局,并且详细解释了如何确定每月第一天对应的星期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

就是常见的选取日期的日历控件而已,还没到的日期无法选择,其它的都和正常日历控件差不多,先看看演示效果吧。

实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数。

日历控件网上一搜一大把,但是我觉得自己写一遍还是有好处的。代码可以查看本页源代码,下面是js代码:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
   <script type="text/javascript">
       //全部包裹
       var sookerTime = (function ($) {
           var OBJ;
           function isLeap(year) { return (year % 100 == 0 ? (year % 400 == 0 ? 1 : 0) : (year % 4 == 0 ? 1 : 0)); }
           function isValid(d) { return (d.getTime() - (new Date()).getTime() < 0) ? true : false; } //是否在今天以后
           function setDate(year, month) {     //建立日期table
               var n1 = new Date(year, month, 1),
                   firstday = n1.getDay(),
                   mdays = new Array(31, 28 + isLeap(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
                   rows = Math.ceil((mdays[month] + firstday) / 7),
                   table = $("<table>", { "class": "days" }),
                   tbody = $("<tbody>");
               $("#calendar").find(".days").remove();
               for (var i = 0; i < rows; i++) {
                   var tr = $("<tr>");
                   for (j = 0; j < 7; j++) {
                       var idx = i * 7 + j,
                           d = idx - firstday + 1;
                       if (d <= 0 || d > mdays[month]) {   //无效日期
                           d = " "
                       }
                       var td = $("<td>", { html: d }).appendTo(tr);
                       if (isValid(new Date(year, month, d))) {  //今天以后的时间都不绑定时间
                           td.addClass("before");
                           td.hover(function () {
                               $(this).addClass("day");
                           }, function () { $(this).removeClass("day"); }).click(function () {
                               OBJ.attr("value", $("#calendar .year").attr("value") + "-" + (parseInt($("#calendar .month").attr("value")) + 1) + "-" + $(this).text());
                               $("#calendar").css("display", "none");
                           });
                       }
                   }
                   tr.appendTo(tbody);
               }
               tbody.appendTo(table);
               $("#calendar").append(table);
           }
           function createTime() {
               var calendar = $("<div>", { "class": "pc_caldr", id: "calendar" }),

                       td = new Date(),
                       of = OBJ.offset();
               if (document.getElementById("calendar")) {
                   calendar = $("#calendar").css({ left: of.left, top: of.top + 18, display: "block" });
                   setDate(td.getFullYear(), td.getMonth());
                   $("#calendar .year").attr("value", td.getFullYear());
                   $("#calendar .month").attr("value", td.getMonth());
               } else {
                   var se = "<div class='selector'><select class='month'><option value='0'>一月</option><option value='1'>二月</option><option value='2'>三月</option><option value='3'>四月</option><option value='4'>五月</option><option value='5'>六月</option><option value='6'>七月</option><option value='7'>八月</option><option value='8'>九月</option><option value='9'>十月</option><option value='10'>十一月</option><option value='11'>十二月</option></select><select class='year'><option value='2009'>2009</option><option value='2010'>2010</option><option value='2011'>2011</option></select></div><ul class='weeks'><li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li></ul>";
                   calendar.css({ left: of.left, top: of.top + 18 }).html(se).appendTo($("body"));
                   setDate(td.getFullYear(), td.getMonth());
                   $("#calendar .year").attr("value", td.getFullYear());
                   $("#calendar .month").attr("value", td.getMonth());
                   bindClick();
               }
           }
           function bindClick() {   //给下拉列表绑定时间
               var a = $("#calendar .month"),
                  b = $("#calendar .year");
               a.change(function () {
                   setDate(b.attr("value"), $(this).attr("value"));
               });
               b.change(function () {
                   setDate($(this).attr("value"), a.attr("value"));
               });
           }
           return {
               init: function (obj) {   //返回调用的接口              
                   OBJ = obj;
                   createTime();
               }
           }
       })(jQuery);

       //使用方法
       $(".tiemin").focus(function(){ 
          sookerTime.init($(this));
        });
         
   </script>

本文引自:http://www.nowamagic.net/librarys/veda/detail/134
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值