一个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"。
猜你喜欢
- 利用这个小游戏可以学习一下ython3.3中tkinter的使用方法# -*- coding: utf-8 -*-import tkinte
- 1 旖旎风景马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈......),这里先给大家拜年啦,祝大家虎年快乐,虎年爆富!&n
- BLOG阅读:http://www.planabc.net/article.asp?id=118在使用CSS实现表现的时候,会经常接触到di
- 本文实例讲述了Python实现比较两个文件夹中代码变化的方法。分享给大家供大家参考。具体如下:这里将修改代码后的目录与原始目录做对比,罗列出
- 前段时间在生活中偶尔需要对某些文件进行重命名,而且是随机名字,刚开始是手动重命名然后在键盘上胡乱打一些字母数字,时间长了发现也挺麻烦的,于是
- Upload组件是自带上传进度,但是样式调起来很麻烦,我们要做的就是自定义一个首先页面要引入组件 Upload, Progressuploa
- 如何进行 Python 性能优化,是本文探讨的主要问题。本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希
- 一、介绍对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/m
- 目录什么是 PyMySQL?PyMySQL 安装数据库连接实例:创建数据库表数据库插入操作数据库查询操作数据库更新操作删除操作执行事务错误处
- 任务描述本关任务:利用 PyEcharts 绘制一个基本的漏斗图。相关知识为了完成本关任务,你需要掌握:1. Python 的基本语法2.
- 当然,每个人都可以编写CSS代码,甚至你现在已经让它为你的项目工作了。但是CSS还可以更好吗?开始用这5个Tips改进你的CSS吧!1.合理
- 情况一:列表中的数字是连续数字(从小到大)from itertools import groupbylst = [1, 2, 3, 5, 6
- 本文实例讲述了JavaScript实现二叉树的先序、中序及后序遍历方法。分享给大家供大家参考,具体如下:之前学数据结构的时候,学了二叉树的先
- 一,最常见MYSQL最基本的分页方式:select * from content order by id desc limit 0, 10在
- 如下所示:<div class="status_button">
- 要替换某一个字段中的部分内容,可以用update 语句: UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '
- @ResponseBody 和 @RequestBody 注解的区别1 前言在详述 @ResponseBody 和 @RequestBody
- 前言:作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队、CBA明星、花边新闻、球鞋美
- 本文实例讲述了php实现统计二进制中1的个数算法。分享给大家供大家参考,具体如下:问题输入一个十进制整数,输出该数二进制表示中1的个数。其中
- 我们打开程序后,会发现电脑的内存和cpu发生了变化。在对于前者上面,自然是希望内容占用小,cpu的利用越高越好。那有没有什么方法可以让我们的