一个jquery日期选取插件源码
作者:fanxiaojie 来源:韦伯花园的魔法师 发布时间:2009-12-23 19:15:00
为了庆祝自己的博客重新开放,我在这里放一个自己刚刚写的jquery日期插件,
也许人们会说:日期选取插件已经这么多了,为什么还要自己写一个啊?
其实我一开始也试图在网上找合适的日期选取插件。但是我发现了两个大问题:那些老外写的插件,多数日期格式是这样子的:DD/MM/YYYY,或者MM/DD/YYYY,而不是中国人习惯的那种写法:YYYY-MM-DD。另外,月份是写成Jan,Feb,,,这样的,而不是“一月”、“二月”。所以我想写一个自己的日期插件。而且我做到了它。
看我是怎样写的吧:以下内容保存为canelder.js
(function($){
$.selectDate=function(obj,settings){var $d=new Date();var DateSettings={date:new Date(),startYear:$d.getFullYear()-10,endYear:$d.getFullYear()+15,dateFormat:"yyyy-mm-dd"};DateSettings=$.extend(DateSettings,settings);if(typeof(DateSettings.date)=="string"){nowDate=new Date();nowDate.setFullYear(parseInt(DateSettings.date.split("-")[0]));nowDate.setMonth(parseInt(DateSettings.date.split("-")[1])-1);nowDate.setDate(parseInt(DateSettings.date.split("-")[2]));}if(typeof(DateSettings.date)=="object"){nowDate=DateSettings.date};var showDate=function(obj){var strYear=new Array();var strMonth=new Array();var mon=new Array('一','二','三','四','五','六','七','八','九','十','十一','十二');for(var i=0;i<12;i++){if(i==nowDate.getMonth()){strMonth.push('<option value="'+(i+1)+'" selected="selected">'+mon[i]+'月</option>');}else{strMonth.push('<option value="'+(i+1)+'">'+mon[i]+'月</option>');}}for(var j=DateSettings.startYear;j<=DateSettings.endYear;j++){if(j==nowDate.getFullYear()){strYear.push('<option value="'+j+'" selected="selected">'+j+'年</option>');}else{strYear.push('<option value="'+j+'">'+j+'年</option>');}}var getDayStr=function(){var year;var month;var nextyear;var nextmonth;year=parseInt($year.val());month=parseInt($mon.val());var selectD=new Date(year,month-1,1);if(month==12){nextyear=year+1;nextmonth=0;}else{nextyear=year;nextmonth=month;}var $ul=$(document.createElement("ul")).addClass('day').appendTo($calenderBody).append('<li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li>');var nextD=new Date(nextyear,nextmonth,1);var $date=$(document.createElement('ul')).addClass('date').appendTo($calenderBody);var $day =parseInt(Math.abs(nextD-selectD)/1000/60/60/24);for(var ii=0;ii<selectD.getDay();ii++){$('<li> </li>').appendTo($date);}for(var nn=1;nn<=$day;nn++){if(nn==nowDate.getDate())$('<li class="today"><a href="#">'+nn+'</a></li>').appendTo($date);else $('<li><a href="#">'+nn+'</a></li>').appendTo($date);}$('li:eq(6),li:eq(13),li:eq(20),li:eq(27),li:eq(34)',$date).addClass('Sat');$('li:eq(0),li:eq(7),li:eq(14),li:eq(21),li:eq(28),li:eq(35)',$date).addClass('Sun');};var changeDate=function(){$calenderBody.empty();getDayStr();$('a',$calenderBody).click(function(){getdate($(this).text());return false;})};var pos=obj.offset();var $calender=$(document.createElement('div')).addClass('calender').appendTo(document.body).css({'left':pos.left+34,'right':pos.top+24});var $close=$('<a href="#">×</a>').appendTo($calender).css('float','right').click(function(){$calender.fadeOut();return false;});var $year=$(document.createElement('select')).html(strYear.join("")).appendTo($calender).change(function(){changeDate();});var $mon=$(document.createElement('select')).html(strMonth.join("")).appendTo($calender).change(function(){changeDate();});var $calenderBody=$(document.createElement('div')).addClass('calenderBody').appendTo($calender);getDayStr();$('a',$calenderBody).click(function(){getdate($(this).text());return false;});$('<hr />').appendTo($calender);$('<a href="#">今天</a>').appendTo($calender).click(function(){var y=nowDate.getFullYear();m=parseInt(nowDate.getMonth())+1;d=nowDate.getDate();filldate(y,m,d);return false;});var getdate=function(day){var y=$year.val();var m=$mon.val();var d=day||nowDate.getDate();filldate(y,m,d)};var filldate=function(y,m,d){var returndate=DateSettings.dateFormat.replace("yyyy",y).replace("mm",m).replace("dd",d);$(obj).val(returndate);$calender.fadeOut();return false;}};showDate(obj);}
})(jQuery);
以下内容保存为demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>simple jQuery date-picker plugin</title>
<style type='text/css'>
.calender {width:168px;height:auto;font-size:12px; margin-right:14px; border-top:1px solid #f8f9fa;border:2px solid #dddddd;padding:4px 6px;background:#a7a9aa;position:absolute;}
.calender ul {list-style-type:none; height:auto;margin:0; padding:0;clear:both;width:168px;}
.calender .day {background-color:#D0FFD0;height:16px;margin:3px 0;}
a{text-decoration:none;}
.calender li{float:left; width:24px; height:18px; line-height:16px; text-align:center;list-style-type:none;}
.calender li a{text-decoration:none; font-family:Tahoma; font-size:12px; color:#333333;display:block;width:22px;height:16px;border-top:1px #ffffff solid;border-left:1px solid #ffffff;border-bottom:1px solid #666666;border-right:1px solid #666666;text-align:center;background:#f5f7f9;}
.calender li.Sat a{color:#2080D0;}.calender li.Sun a{color:#cc0000;}
.calender li.today a{background:#FFF440;font-weight:bold;}
.calender li a:hover {border-left:1px solid #666666;border-top:1px solid #666666;border-bottom:1px solid #ffffff;border-right:1px solid #ffffff;}
.calenderBody {clear:both;width:168px;margin-top:8px;min-height:106px;}
</style>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="calender.js"></script>
<script type="text/javascript">
$(function(){$('#date').click(function(){$.selectDate($(this));})})
</script>
</head>
<body>
<input type="text" readonly name="date" id="date"/>
</body>
</html>
这个东东,我在IE6、IE7、IE8、firefox、chrome、safri、opera里都测试过可用了。
调用方法示例:
$.selectDate($(this),{"date":"1999-11-1","startYear":1990,"endYear":1999,dateFormat:"MM/DD/YYYY"});
表示打开九十年代的日历,返回的日期格式是英国式的“MM/DD/YYYY”。dateFormat可用的值有"MM/DD/YYYY"、“DD/MM/YYYY”以及"YYYY-MM-DD",默认值是"YYYY-MM-DD"。
猜你喜欢
- 在windows下的解决办法如下: 1.net stop mysql 停用服务 &
- 笔者通过一周的时间,询问了许多设计人员真实用户,以便确保这六个方面确实是大多数用户所不喜并且有非常大的概率普遍存在于众多的医疗网站之中。那么
- 一、问题描述当用JS调用form的方法submit直接提交form的时候,submit事件不响应。为什么?知道的请回复。类比一下,我用inp
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 今天把博客的日历脚本又改了一改,就帖上了,以后找起来方便一点,同时也给需要的人带来方便,本来还想加点功能再帖上来,不过我看还是没必要了,帖的
- 我的机器不知为何,安装MySQL的时候,一到配置那一步就无休止的等待,只好结束任务,然而启动MySQL的时候出现1067错误提示
- 看如下asp代码:<%@ codepage="65001" %><!-- 
- 1.5 学习ASP.net 的过程中如何求助--加入 ASPNG 讨论列表 Charles Carroll 作为不断壮大的 ASP.NET
- 数据库是什么 在学习ACCESS之前,我们先了解一下什么是“数据库”。我们举个例子来说明这个问题:每个人都有很多亲戚和朋友,为了保持与他们的
- 今天开始学习 YUI,加强一下对 JavaScript 的理解。1. 命名空间 YAHOO
- 完成了UI,我们就需要对数据进行处理了。在开始“数据”的本地存储之前,我们先来了解一下client-side database storag
- 1.1.1 摘要 如果说要对数据库进行优化,我们主要可以通过以下五种方法,对数据库系统进行优化。 1. 计算机硬件调优 2. 应用程序调优
- 原来的程序是使用sqlite这个嵌入式数据库作为Remit(code name)的数据源的,因为NHibernate支持这个,然而有一点不好
- 晚上突然间看到大猫的头像在闪动,速度打开一看,发现他问,以前我写button标签的时候有没有写type属性,老实的我只有诚实地告诉他,我没写
- Javascript 正常取来源网页的URL只要用: document.referrer就可以了!但,如果来源页是Jav
- 先从String的扩展开始吧,后面有一部分的扩展要依赖这里扩展的方法。为了更加清晰和详细,我会一个方法一个方法地贴出来,你完全可以把所有的方
- 一直希望自己对Web设计的色彩把握的更好些,所以手头上就备了一份图片版的配色表,对色彩的搭配有了很多的提高,今天发现了这套非常完整的Web版
- 先来看看Global.asax文件代码:<script language="VB" runat
- 有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 M
- 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 摘 要