`

自己写的一个简单的jquery 日期插件

阅读更多

写日期插件主要的2个问题:

 

1。计算某个月有多少天,2012.9月到底有多少天呢?

 

(new Date(+(new Date(2012, 7, 1)) - 24×60×60×1000)).getDate();	

 

2、知道了当月有多少天还不行,要知道当月1号是要放在什么位置

 

new Date(2012, 7,1).getDay();

 

 

下面是日期插件的calendar.js代码

 

 

(function($){
	//参数
   var setting={
	  container_idName: 'container',//容器的类名
	  column_space: 10,//列间距
	  cell_selector: '.data',//要排列的砖块的选择器,context为整个外部容器
	  pre_year_selector: '.prev-year',
	  next_year_selector: '.next-year',
	  pre_month_selector: '.prev-month',
	  next_month_selector: '.next-month'
   },
   //
   calendar=$.calendar={},//对外信息对象
   $container=null;//容器
   $date = new Date(); //当前的时间对象
   $year = $date.getFullYear();
   $month = $date.getMonth();
   $week = $date.getDay();
   $.fn.extend({
	   calendar:function(opt){
		  opt=opt||{};  
	      setting=$.extend(setting,opt);
		  $container=calendar.$container=$(this);
		  
		  //1初始化日期的输出
		  _init($('#'+setting.container_idName));
		  //2 给页面的a标签注册事件处理函数
		  $(setting.pre_year_selector).live('click',_handPreYear);
		  
		  $(setting.pre_month_selector).live('click',_handPreMonth);
		  
		  $(setting.next_year_selector).live('click',_handNextYear);
		  
		  $(setting.next_month_selector).live('click',_handNextMonth);
		  
		  // $('.row '+setting.css_selector).live('click',_handClickCell);
		  $('.row '+setting.cell_selector).live('click',_handClickCell);
	
		  //3 给input绑定事件
		  $('#datepicker').bind('focus',_handInputFocus);
		  //$('#datepicker').bind('blur',_handInputBlur);
		  $('#'+setting.container_idName).bind('mouseleave ',_handMouthOutCont);
		   $('#'+setting.container_idName).bind('mouseenter',_handMouthOverCont);
	   }
   });
   
   //初始化表格的输出
   function _init(element){
		//输出操作 
	  	_calcTableContent($year,$month,element);
		
		
   }
   
   function _calcTableContent(year,month,element){
	   var html = '';
		html = ('<div class="opt"><a href="javascript:void(0);" class="prev-year">&lt;&lt;</a><a href="javascript:void(0);" class="prev-month">&lt;</a><a href="javascript:void(0);" class="title">'+year+'年'+(month+1)+'月</a><a href="javascript:void(0);" class="next-month">&gt;</a><a href="javascript:void(0);" class="next-year">&gt;&gt;</a></div>');
		//输出星期 标题
		html += ('<div class="head"><span >天</span><span >一</span><span >二</span><span >三</span><span >四</span><span >五</span><span >六</span></div>');
		//debugger;
		var daysOfMonth = _calcDaysForMonth(year,month+1);
		var firstDayOfMonth = _calcFirstDayPosition(year,month);
		var count = 1;
		outer:
		for(var i=1;i<7;i++){
			html += ('<div class="row">');
			
			for(var j=0;j<7;j++){
				if(j<firstDayOfMonth && i==1){
					html += ('<a href="###" class="cell"></a>');
				}else{
					
					if($date.getDate()===count && $month===month){
						html += ('<a href="###" class="cell data highlight" data-year="'+year+'" data-month="'+month+'" data-day="'+(count)+'">'+(count)+'</a>');	
					}else{
						html += ('<a href="###" class="cell data" data-year="'+year+'" data-month="'+month+'" data-day="'+(count)+'">'+(count)+'</a>');
					}
					
					count++;
					if(count>daysOfMonth){
						break outer;	
					}
					

				}
				
				
			}
			
			html += ('<div style="clear:both;"></div>');
			html += ('</div>');
			
			
		}
		//alert(alert(element[0].tagName));
		element.html(html);
   }
   function creatColumn(){//创建列
      waterfall.column_num=calculateColumns();//列数
	  //循环创建列
	  var html='';
	  for(var i=0;i<waterfall.column_num;i++){
	     html+='<div class="'+setting.column_className+'" style="width:'+setting.column_width+'px; display:inline-block; *display:inline;zoom:1; margin-left:'+setting.column_space/2+'px;margin-right:'+setting.column_space/2+'px; vertical-align:top; overflow:hidden"></div>';
	  }
	  $container.prepend(html);//插入列
	  return $('.'+setting.column_className,$container);//列集合
   }
   
   /**
   *j 计算一个月有多少天
   */
   function _calcDaysForMonth(year,month){
	  var days = (new Date(+(new Date(year, month, 1)) - 86400000)).getDate();
	 
	   return days;
   }
   
   /**
   *计算这个月的第一天显示的的位置,可以根据它的星期来计算
   */
   function _calcFirstDayPosition(year,month){
	   
		return new Date(year, month,1).getDay();
   }
   
   //返回上一年的数据
   function _handPreYear(){
	   console.log(1);
	   var element = $('#'+setting.container_idName);
	   var year = $('body').data('year');
	   var month = $('body').data('month');
	   //debugger;
	   if(year){
		   year = year-1;
		   
	   }else{
		   year = parseInt($year)-1;
		   
	   }
	   if(!month && month!=0){
		   month = $month;
	   }
	   $('body').data('year',year);
	   
	   
	   _calcTableContent(year,month,element);
   }
   //返回上一个月的数据
   function _handPreMonth(){
	    console.log(2);
		var element = $('#'+setting.container_idName);
		var year = $('body').data('year');
	   var month = $('body').data('month');
	   if(month || month==0){
		   month = month-1;
		   if(month<0){
				month =0;  
				return;
		   }
	   }else{
		   month = parseInt($month)-1;
		   
	   }
	    if(!year){
		   year = $year;
	   }
	   
	   $('body').data('month',month);
	   _calcTableContent(year,month,element);
   }
   
   //返回下一年的数据
   function _handNextYear(){
	    console.log(3);
		 var element = $('#'+setting.container_idName);
	   var year = $('body').data('year');
	    var month = $('body').data('month');
	   //debugger;
	   if(year){
		   year = year+1;
		   
	   }else{
		   year = parseInt($year)+1;
		   
	   }
	   
	    if(!month && month!=0){
		   month = $month;
	   }
	   $('body').data('year',year);
	   _calcTableContent(year,month,element);
   }
   
   //返回下一个月的数据
   function _handNextMonth(){
	    console.log(4);
				var element = $('#'+setting.container_idName);
				var year = $('body').data('year');
	   var month = $('body').data('month');
	   //debugger;
	   if(month || month==0){
		   month = month+1;
		    if(month>11){
				month = 11;
				return; 
		   }
		   
	   }else{
		   month = parseInt($month)+1;
		   
	   }
	   
	    if(!year){
		   year = $year;
	   }
	   $('body').data('month',month);
	   _calcTableContent(year,month,element);

   }

	function _operator(t){

/**
		switch(t){
			case:'pre-year'
			
			break;
			caese 'pre-month'
			
			break;
			
			case: 'next-year'
			
			break;
			
			case: 'next-month'
			
			break;
			default:
		}
		*/
	}
	
	function _handClickCell(){
		
		//$('.row '+setting.cell_selector).each(function(index, element) {
            $('.row '+setting.cell_selector).removeClass('highlight');
			$(this).addClass('highlight');
			//获取保存在a标签里面的数据
			var $year = $(this).attr('data-year');
			var $month = $(this).attr('data-month');
			var $day = $(this).attr('data-day');
			//设置年、月、日的值
			console.log($year+'-'+$month+'-'+$day);
			$('#datepicker').val($year+'-'+(new Number($month)+1)+'-'+$day);
			
     //   });
	}
	
	function _handInputFocus(){
		var datapicker = $('#datepicker')[0];
		var position = getElementPos(datapicker);
		
		
		position.left -= 12;
		position.top += 32;
		//alert(position.left+'-'+position.top);
		$('#'+setting.container_idName).offset({left:0,top:0});
		$('#'+setting.container_idName).offset(position);
		$('#'+setting.container_idName).show('fast');
		

	}
	
	
	function _handInputBlur(){
		//$('#'+setting.container_idName).hide();
		
		//让div容器的left,top还原,要不然每次点击input的时候left,top都会在原来的基础上加
		//$('#'+setting.container_idName)[0].style.left = 0;
		//$('#'+setting.container_idName)[0].style.top = 0;
		
	}
	
	function _handMouthOutCont(){
		$('#'+setting.container_idName).hide();
		
		//让div容器的left,top还原,要不然每次点击input的时候left,top都会在原来的基础上加
		$('#'+setting.container_idName)[0].style.left = 0;
		$('#'+setting.container_idName)[0].style.top = 0;
	}
	
	function _handMouthOverCont(){
		_handInputFocus();
	}
	function getElementPos(elt){
		
		var x=0,y=0;
		while(elt!=null){
			x += elt.offsetLeft;
			y += elt.offsetTop;
			elt = elt.offsetParent;	
		}
		return {top:x,left:y};
	}

})(jQuery);

 

html页面代码

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="calendar.css" rel="stylesheet">
<script src="jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="calendar.js" charset="gbk"></script>
<title>Calendar</title>
</head>
<body>
	<div id="wrapper">
		<h2 style="text-align:center;margin-top:30px;">jquery calendar插件</h2>
		日期:<input type="text" id="datepicker"/>
		<div id="container">

		</div>
	</div>
	<script type="text/javascript">
	$(document).ready(function() {

		var opt = {
			container_idName:'container'
		}
		
		$('#container').calendar(opt);

		
	});
	</script>
</body>
</html>
 

这个日期插件不完善,这只是最开始的版本。

 

效果图:



 

 

 

 

 

  • 大小: 6.7 KB
分享到:
评论

相关推荐

    jquery日期插件

    而“jquery日期插件”是jQuery生态中的一个重要组成部分,它为网页应用提供了丰富的日期处理功能,包括日期选择器、日期格式化、日期计算等,极大地提升了用户体验。在本篇中,我们将深入探讨jQuery日期插件的相关...

    jquery 日期插件

    在本篇文章中,我们将深入探讨jQuery日期插件的原理、常见功能以及如何在项目中使用它们。 首先,jQuery 日期插件的核心目标是增强用户在网页上与日期进行交互的体验。这包括但不限于日期选择器、日期格式化、日期...

    jquery 日期 时间 插件

    这篇内容将详细讲解jQuery日期时间插件的基本概念、功能特性、常见用法以及如何在项目中集成和自定义。 1. **基本概念**: - jQuery日期时间插件是一种JavaScript组件,通过jQuery库来实现日期和时间的选择器,...

    jQuery日期选择插件

    - **易用性**:jQuery日期插件通常提供简单的API,易于理解和集成到项目中。 - **跨浏览器兼容**:由于jQuery库的跨浏览器特性,日期插件也能在多种浏览器中运行良好。 - **可扩展性**:通过插件机制,可以轻松添加...

    jquery日期插件 适合各种浏览器

    总的来说,一个优秀的jQuery日期插件能够提升用户体验,减少开发者的工作量,同时提供强大的日期处理功能。对于这个“适合各种浏览器的jquery日期插件”,开发者可以期待其稳定、高效且易用的特性,以满足各种项目...

    jQuery插件 简单日期设置

    在IT领域,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计和Ajax交互。本主题聚焦于"jQuery插件 简单...开发者可以查阅这些文件,理解并学习如何构建一个简单的jQuery日期选择插件。

    jquery日期插件及用法

    **jQuery 日期插件及其用法详解** 在Web开发中,日期选择器是一个常见的功能,它使得用户能够方便地输入或选择日期。jQuery Datepicker 是一个流行的选择,它提供了丰富的功能和灵活的自定义选项。这个插件尤其适合...

    jQuery日期选择器插件

    综上所述,jQuery日期选择器插件通过简单易用的API和高度定制化的能力,为网页开发提供了一种高效、便捷的日期输入解决方案。通过深入理解其工作原理和使用技巧,开发者可以创建出更加友好的用户体验。在实际项目中...

    转:jquery日期插件!

    描述中提到的“博文链接:https://leon1509.iteye.com/blog/684044”是一个外部资源,虽然具体内容未在当前信息中提供,但我们可以推测这可能是一个关于该jQuery日期插件的详细教程或者使用示例。通常,这种博客文章...

    jquery日期选择插件

    而"jquery日期选择插件"是jQuery生态中的一个重要组成部分,用于帮助开发者实现在网页上方便地添加日期选择功能。这类插件通常提供美观的界面、用户友好的交互以及灵活的配置选项,以满足不同项目的需求。 日期选择...

    jquery 日期选择插件

    而“jQuery日期选择插件”是用于在网页上添加日期选择功能的工具,极大地提升了用户体验。其中,“datapicker”是这类插件的一个实例,它允许用户方便地选择日期,常见于表单输入、日程安排或时间记录等应用场景。 ...

    常用的jquery日期插件

    本篇文章将详细介绍一种常用于前端开发的jQuery日期插件及其特点。 标题中提到的“常用的jQuery日期插件”,可能是指jQuery UI中的Datepicker插件,它是一款功能强大且用户友好的日期选择工具。Datepicker插件允许...

    简单jQuery日期日历插件代码.zip

    【标题】"简单jQuery日期日历插件代码.zip" 是一个包含实现基本日期选择功能的jQuery插件资源包。这个插件可能适用于那些希望在网页上添加日期选择功能,但又不想投入大量时间进行复杂开发的开发者。它利用了jQuery...

    jQuery手机移动端日期时间选择插件

    总之,"jQuery手机移动端日期时间选择插件"是一个方便开发者在移动设备上实现高效日期和时间输入的工具,它的灵活性和易用性使其成为许多移动应用开发者的首选解决方案。通过合理地利用这个插件,开发者可以创建出...

    jQuery日期和时间插件

    在自定义选项方面,jQuery日期插件提供了丰富的配置项,包括但不限于: 1. `startDate`和`endDate`:设置允许用户选择的日期范围。 2. `showOn`:指定触发日期选择器的方式,如“focus”(聚焦)或“both”(点击和...

    一个简单功能的js日期插件

    而"jquery日期插件"则意味着这个插件扩展了jQuery的功能,让日期处理变得更加简单。 在实际应用中,你可以根据项目需求调整插件的配置,比如更改日期格式、设定可选日期范围、添加自定义事件等。此外,由于这是一个...

Global site tag (gtag.js) - Google Analytics