Jquery日历插件制作简单日历


Posted in Javascript onOctober 28, 2015

在页面开发中,经常遇到需要用户输入日期的操作。通常的做法是,提供一个文本框(text),让用户输入,然后,编写代码验证输入的数据,检测其是否是日期类型。这样比较麻烦,同时,用户输入日期的操作也不是很方便,影响用户体验。如果使用jQuery UI中的datepicker(日历)插件,这些问题都可以迎刃而解。该插件调用的<span style="color:#cc66cc;"><strong>语法格式</strong></span>如下: 

$(“.selector”).datepicker(options); 

其中”.selector”表示DOM元素,一般指文本框,由于该插件的作用是提供日期选择,因此常与一个文本框绑定,将选择后的日期显示在该文本框中,选择options是一个对象与前面插件中的options一样,通过改变其参数对应的值,从而实现插件功能的变化,在datepicker插件中,选择options常用参数如下 

1、changeMonth    设置一个布尔值,如果wietrue,则可以在标题处出现一个下拉选择框,可以选择月份,默认值为false 
2、changeYear  设置一个布尔值,如果为true,则可以在标题处出现一个下拉选择框,可以选择年份,默认为false 
3、showButtonPanel   设置一个布尔值,如果为true,则在日期的下面显示一个面板,其中有两个按钮;一个为“今天”,另一个按钮为“关闭”,默认值为false,表示不显示 
4、closeText   设置关闭按钮上的文字信息,这项设置的前提是,showButtonPanel的值必须为true,否则显示不了效果 
5、dateFormat   设置显示在文本框(text)中的日期格式,可设置为{dateFormat,'yy-mm-dd'},表示日期的格式为年-月-日,如2012-10-1 
6、defaultDate  设置一个默认日期值,如{defaultDate+7},表示,弹出日期选择窗口后,默认的日期是在当前日期上加上7天 
7、showAnim   设置显示弹出或隐藏日期选择窗口的方式。可以设置的方式有,“show”、“sildeDown”、“fadeln”后者“”,表示没有弹出日期选择窗口的方式 
8、showWeek  设置一个布尔值,如果为true,则可以显示每天对应的星期,默认值为false 
9、yearRange   设置年份的范围

最近在研究js插件的开发,以前看大神们,对插件都是信手拈来,随便玩弄,感觉自己要是达到那种水平就好了,就开始自己研究插件开发了。研究了一段时间之后,就开始写了自己的第一个日历插件,由于是初学插件开发,代码的可读性可能有点差,希望各位大神可以多提点意见,以后维护代码,让这个插件更加的完整。

下面就贴出代码。

首先,给插件来个整体的div容器

<div class="y-total"></div>

本人习惯给容器取class或id名时,加上自己独特的前缀,这样,有助于识别自己的代码,也避免与其他同事的样式冲突。

然后就是开始写样式,可以根据自己的需求来调整样式

.y-total{height:auto;border:px solid #;}
  .y-total .return-btn{height:px;}
  .y-total .return-btn>div{border-right: px solid #;border-bottom: px solid #;color: #;font-family: "Microsoft Yahei",PMingLiU,Verdana,Arial,Helvetica,sans-serif}
  .y-total .return-btn>div:nth-child(){border-right:px;}
  .y-total .prev-btn{cursor: pointer;width:%;float: left;text-align: center;}
  .y-total .time{cursor: pointer;float:left;width:%;text-align: center;}
  .y-total .next-btn{cursor: pointer;float:right;width:%;text-align: center;}
  .y-total .y-stop{position: absolute;margin-left: px;background-color: red;color: #fff;}
  .y-total #datatab{clear:both;width:%;}
  .y-total #datatab td {height:px;font-family: "Microsoft Yahei",PMingLiU,Verdana,Arial,Helvetica,sans-serif;color: #;border: px solid #DDD;font-size: px;text-align: center;}

第三步,就是插件的代码了

<script>
  (function($){
   var Beautifier = function(vals,options){
    this.vals = vals;
    this.defaults = {
    "width":"px"
    }
    this.p = $.extend({},this.defaults,options); 
    this.$div = $("<div class='return-btn'></div>");
   this.prev = $("<div class='prev-btn'>前一页</div>");
   this.time = $("<div class='time'></div>");
   this.next = $("<div class='next-btn'>后一页</div>");
   this.tab = $("<table id='datatab'><tr></tr></table>");
   }
 
   Beautifier.prototype = {
   getDate : function(){
    var vals = this.vals;
    var t = this.time.attr("class");
    var tab = this.tab.attr("id");
    this.$div.append(this.prev,this.time,this.next);
    $(this.p.$this).append(this.$div,this.tab).width(this.p.width);
    var i = getInfo(vals);
    $("."+t).text(vals.year+"-" + i[]+"-" + i[]);
    $(".prev-btn,.next-btn").click(function(){returnAction($(this),t,vals,tab)}); 
    setDateInfo(tab);
    init(vals,tab);
   }
   }
   /*加载时将日期放入td中*/
   function init(vals,tab){
    var w = new Date(vals.year+","+vals.month+","+).getDay()//获取本月第一天是星期几
    var l =(w==?:w-) + new Date(vals.year,vals.month,).getDate();//需要铺上td的个数
    var t = Math.ceil(l/);
    for(var i=; i<t; i++){
    $("#"+tab).append("<tr class='y-tr'></tr>");
    }
    $(".y-tr").each(function(){
    for(var i=; i<; i++){
     $(this).append("<td></td>");
    }
    })
    setvalue(vals,new Date(vals.year,vals.month,).getDate(),w);
   }
   function setvalue(val,l,w){
    for(var i=;i<l+;i++){
    var space = w==?i+-+:i+w-+;
    $("td").eq(space).text(i);
    if(i == val.day){
     $("td").eq(space).css("color","red"); 
    }
    }
   }
   function getInfo(vals){
    var info = [];
    info.push(vals.month > ? vals.month : "" + vals.month);
    info.push(vals.day > ? vals.day : "" + vals.day);
    return info;
   }
 
   function setDateInfo(tab){
   var m = ["","一","二","三","四","五","六","日"];
   for(var i=; i<; i++){
    $("#"+tab).find("tr:eq()").append("<td>星期"+m[i]+"</td>");
   }
   }
   /*上一页,下一页的点击事件*/
   function returnAction($this,t,val,tab){
    if($this.attr("class") == "prev-btn"){
     if(val.month < ){
     val.month =;
     val.year-=;
     }else{
     val.month-=;
     }
    }else if($this.attr("class") == "next-btn"){
     if(val.month > ){
     val.month =;
     val.year+=;
     }else{
     val.month+=;
     }
    } 
    var v = getInfo(val);
    $("."+t).text(val.year+"-"+v[]+"-"+v[]);
    $(".y-tr").remove();
    init(val,tab);
   } 
 
   $.fn.work = function(options){
   var t = new Date();
   var DateVal = {
    "year" : t.getFullYear(),
    "month" : t.getMonth()+,
    "day" : t.getDate()
   }
   var objs = new Beautifier(DateVal,options); 
   objs.getDate();
   }
  })(jQuery)
 </script>

那么,插件就差不多完成了,现在只需要调用插件的方法就可以了

<script>
  $(".y-total").work({
  "$this" : ".y-total",
  "width" : "px",//控制容器的宽度
  });
 </script>

效果如图:

 Jquery日历插件制作简单日历

Javascript 相关文章推荐
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
Apr 01 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
Oct 09 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
layui 解决form表单点击无反应的问题
Oct 25 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
vue路由的配置和页面切换详解
Sep 09 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 #Javascript
开启Javascript中apply、call、bind的用法之旅模式
Oct 28 #Javascript
JavaScript多并发问题如何处理
Oct 28 #Javascript
JS实现双击屏幕滚动效果代码
Oct 28 #Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 #Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
Oct 28 #Javascript
jquery实现的动态回到顶部特效代码
Oct 28 #Javascript
You might like
给初学PHP的5个入手程序
2006/11/23 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
php实现微信企业转账功能
2018/10/02 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
javascript实现弹出层效果
2019/12/10 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Python 流程控制实例代码
2009/09/25 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Python 文件数据读写的具体实现
2020/01/24 Python
python线程join方法原理解析
2020/02/11 Python
如何利用python生成MD5并去重
2020/12/07 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
大学应届毕业生求职信
2014/05/24 职场文书
代办出身证明书
2014/10/21 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
教师个人成长总结
2015/02/11 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
使用tensorflow 实现反向传播求导
2021/05/26 Python
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL