今天整理资料发现了!还是以前写的,刚刚接触的jquery。和大家分享下思路
function Calendar(config){
config=config||{};
if((typeof config)!="object"){
return;
}
for(var p in config){
this[p]=config[p];
}
this.datas=new Map();
//this.datasId="guestCalendar";
this.selectDay=null;
this.selectTime=null;
this.selectKey=null;
var DOC=document,getElement=function(id){return DOC.getElementById(id);};
//对应的ids 0 显示年的 1 显示 月的 2 显示天的
this.calendarIds=['easyJsYear','easyJsMonth','easyJsShowDate'];
this.init=function(){
var d=new Date();
this.currentMonth=d.getMonth()+1;
this.currentYear=d.getFullYear();
d=null;
};
this.initShowCalendar=function(){
this.year=this.currentYear;
this.month=this.currentMonth;
this.showYearMonth();
this.showDate();
};
//o {year:2011} or {month:10}
this.changeShowCalendar=function(o){
var obj=o;
if(obj.year){
if(this.year+obj.year<1990){
return;
}
this.year=this.year+obj.year;
}
if(obj.month){
if(this.month+obj.month>12||this.month+obj.month<1){
return;
}
this.month=this.month+obj.month;
}
this.showYearMonth();
this.showDate();
};
this.showYearMonth=function (){
$("#"+this.calendarIds[0]).html(this.year+"年");
$("#"+this.calendarIds[1]).html(this.month+"月");
};
this.showDate=function(){
var y = this.year, m = this.month;
//判断当月有跨越几周
var week=Math.ceil((new Date(y, m, 0).getDate() + new Date(y, m - 1, 1).getDay()) / 7);
//当月开始是星期几
var start_week=new Date(y, m - 1, 1).getDay();
//当月结束是星期几
var end_week=new Date(y, m, 0).getDay();
//当前月有多少天
var lastDate=new Date(y, m, 0).getDate();
var tempdate=0,vName=this;
var parent=getElement(this.calendarIds[2]);
removeAllNodes(this.calendarIds[2]);
for(var i=0;i<week;i++){
var tr=DOC.createElement("tr");
for(var ii=0;ii<7;ii++){
var td=DOC.createElement("td");
td.className="nEasyJsWeekTd";
tr.appendChild(td);
if(i==0){
if(ii<start_week){
continue;
}
}else if(i==(week-1)){
if(ii>end_week){
continue;
}
}
tempdate++;
var tkey=parseInt(""+this.year+(this.month.toString().length>1?this.month:"0"+this.month)+(tempdate.toString().length>1?tempdate:"0"+tempdate));
if(this.datas.containsKey(tkey)){
td.className="sEasyJsWeekTd";
}
td.onclick = function(o){vName.chanageDate(this);};//兼容ie6
td.innerHTML=tempdate;
}
parent.appendChild(tr);
}
};
this.GenerateCalender=function(){
DOC.write('<div id="easyJsCalendarDate" class="easyJsCalendarDate" style="display:none">');
DOC.write('<div class="easyJsYearMonth"><table width="100%" border="0" cellspacing="1" cellpadding="1"><tr><td onclick="'+this.varName+'.changeYear(-1)"><<</td><td onclick="'+this.varName+'.changeMonth(-1)"><</td><td id="easyJsYear"></td><td id="easyJsMonth"></td><td onclick="'+this.varName+'.changeMonth(1)">></td><td onclick="'+this.varName+'.changeYear(1)">>></td></tr></table></div>');
DOC.write(' <div class="easyJsWeek"><table width="100%" border="0" cellspacing="1" bgcolor="#CCCCCC" cellpadding="1"><tr><th scope="col">日</th><th scope="col">一</th><th scope="col">二</th><th scope="col">三</th><th scope="col">四</th><th scope="col">五</th><th scope="col">六</th></tr><tbody id="easyJsShowDate"></tbody>');
DOC.write('<tr><td onclick="'+this.varName+'.showToday()" colspan="3">今天</td><td onclick="'+this.varName+'.closeDateWindow()" colspan="3">关闭</td><td onclick="resetCalendarTimeForm()">c</td></tr></table></div></div>');
};
this.changeMonth=function(type){
this.changeShowCalendar({month:type});
};
this.changeYear=function(type){
this.changeShowCalendar({year:type});
};
this.showToday=function(){
this.initShowCalendar();
};
this.closeDateWindow=function(){
$("#easyJsCalendarDate").hide();
};
this.setDatasInPage=function(){
var d=this.datas;
var s=this.datas.toString(
function(key,values){
return values;
}
);
var enter=getElement(this.enter);
if(enter.nodeName=='INPUT'){
enter.value=s;
}else
enter.innerHTML=s;
};
this.clearTimePickerSelect=function(){
for(var i=0;i<24;i++){
this.selectTime.splice(i,1,-1);
}
var table=getElement("easyJsCalendarTimeTable");
for(var j=0;j<4;j++){
var tr=table.rows[j];
for(var k=0;k<6;k++){
tr.cells[k].className="cEasyJsCalenderTimeTd";
}
}
};
this.setStyleProperty=function(o,name,value){
o.style[name]=value;
};
this.chanageDate=function(o){
this.selectDay=o;
var tmonth=this.month.toString().length>1?this.month:"0"+this.month,tday=this.selectDay.innerHTML.length>1?this.selectDay.innerHTML:"0"+this.selectDay.innerHTML;
this.selectKey=parseInt(this.year+""+tmonth+""+tday);
var selectValue=this.year+"-"+tmonth+"-"+tday;
if(this.datas.containsKey(this.selectKey)){
this.selectTime=this.datas.get(this.selectKey);
this.datas.remove(this.selectKey);
this.selectDay.className="nEasyJsWeekTd";
}else{
this.datas.modify(this.selectKey,selectValue,true);
this.selectDay.className="sEasyJsWeekTd";
}
this.setDatasInPage();
};
this.triggerEvent=function(){
if(this.trigger){
var t=this;
$("#"+this.trigger).click(function(e) {
$("#easyJsCalendarDate").css("position","absolute").css("top", e.pageY+ "px").css("left", e.pageX + "px");
t.showDatePicker();
});
}
};
this.showDatePicker=function(id){
$("#easyJsCalendarDate").show();
};
this.putDatas=function(){
if(this.dataMaps){
this.dataMaps.put(this.dataKey,this.datas);
}
}
this.setDates=function(key){
if(!this.dataMaps){
this.dataMaps=new Map();
}
this.dataKey=key;
if(this.dataMaps.containsKey(key)){
this.datas=this.dataMaps.get(key);
}else{
this.datas=new Map();
}
}
this.GenerateCalender();
this.init();
this.initShowCalendar();
this.triggerEvent();
}
下面是用的的相关function
/*
* Map对象,实现Map功能
*
*
* size() 获取Map元素个数
* isEmpty() 判断Map是否为空
* clear() 删除Map所有元素
* put(key, value) 向Map中增加元素(key, value)
* remove(key) 删除指定key的元素,并返回该key的value
* get(key) 获取指定key的元素值value
* modify(key,value,auto) 修改key的value.如果auto为true,key不存在,会将key和value添加为新值;为false,key不存在将不进行添加
* containsKey(key) 判断Map中是否含有指定key的元素
* containsValue(value) 判断Map中是否含有指定value的元素
* keys() 获取Map中所有key的数组(array)
* values() 获取Map中所有value的数组(array)
*
*/
function Map(){
/**
*初始化datas
*/
this.initialize=function(){
this.datas=new Object();
}
/**
* 得到datas中的对象数目
*/
this.size=function() {
var i = 0;
for(var ele in this.datas) {
i ++;
}
return i;
};
this.isEmpty=function(){
return this.size()>0?false:true;
};
this.clear=function(){
for(var key in this.datas) {
delete this.datas[key];
}
};
this.put=function(key, value) {
return this.datas[key] = value;
}
this.remove=function(key) {
var value = this.datas[key];
delete this.datas[key];
return value;
};
this.get=function(key) {
if (this.datas[key] !== Object.prototype[key])
return this.datas[key];
};
this.modify=function(key,value,auto){
if(this.containsKey(key)){
this.remove(key);
this.put(key,value);
}else{
if(auto){
this.put(key,value);
}
}
};
this.containsKey=function(key){
if(key in this.datas){
return true;
}
return false;
};
this.containsValue=function(value){
var r=false;
for(var key in this.datas){
if(this.datas[key]==value){
r=true;
break;
}
}
return r;
}
this.keys=function() {
return this.pluck('key');
};
this.values=function() {
return this.pluck('value');
};
/**
* 遍历Map,执行处理函数
* @param {Function} 回调函数 function(arrary){..}
*/
this.each=function(fn){
for (var key in this.object) {
var value = this.object[key], pair = [key, value];
pair.key = key;
pair.value = value;
fn(pair);
}
};
/**
* 返回object的对象的复制
*/
this.toObject=function(){
var destination={};
for (var property in this.datas)
destination[property] = this.datas[property];
return destination;
};
this.pluck=function(property) {
var results = [];
for(var key in this.datas){
if(property=='key'){
results.push(key);
}else if(property=='value'){
results.push(this.datas[key]);
}
}
return results;
};
/**
* toString方法
* fn是调用函数
*/
this.toString=function(fn) {
var b = this.datas;
var buf = [];
for(var key in b) {
buf.push(fn(key,b[key]));
buf.push('\n');
}
return buf.join('');
};
this.formatToString=function(fn){
var keys=this.keys();
//function sortNumber(a,b){return a - b} 从小到大 ;function sortNumber(a,b){return b - a} 从大到小
keys.sort(function sortNumber(a,b){return a - b});
var buf=[];
for(var i=0;i<keys.length;i++){
buf.push(fn(keys[i],this.datas[keys[i]]));
buf.push("\n");
}
return buf.join('');
};
this.initialize();
}
function StringBuffer(){
this.array=[];
this.append=function(string){
this.array.push(string);
}
this.toString=function(){
return this.array.join("");
}
}
//删除该id下的所有节点
function removeAllNodes(id){
var parent=document.getElementById(id);
while(parent.childNodes.length>0) {
parent.removeChild(parent.childNodes[0]);
}
}
在页面调用
<body>
<textarea id="guestCalendar" style="height:100px; width:200px;"></textarea>
<input id="trigger" value="日期" type="button"/>
<script>
var datePicker=new Calendar({
enter:'guestCalendar',//显示值的的id
trigger:"trigger" //触发控件id,该控件要支持click
});
</script>
</body>
分享到:
相关推荐
在IT领域,尤其是在前端开发中,"可多选的日期控件"是一个常见的需求,它允许用户在日历界面中选择多个日期,而非只能选择单个日期。这种控件广泛应用于各种应用程序,如行程规划、会议安排或者数据分析等场景。在本...
在传统的日期选择器中,用户通常只能选择单个日期,而可多选日期控件则扩展了这一功能,使得用户可以一次性选取多个日期,满足更复杂的业务需求。 实现可多选日期控件的技术通常涉及前端框架和库,如JavaScript、...
"多选日历控件"是指能够允许用户选择多个日期的特定日历组件。这类控件在许多应用中都有广泛的应用,如会议安排、任务管理、旅行预订等场景,因为它提供了灵活的日期选择方式。 描述中提到的“可多选的日期控件”...
在这个场景下,"日期多选控件"的实现和优化至关重要,它能提供良好的用户体验,使得日期选择过程简单快捷。 首先,我们要理解这个控件的基本功能。日期多选控件允许用户选择一个日期范围,而不是单一的日期。用户...
在你提供的资料中,我们讨论的是一个名为"MulitCheckComboBox"的自定义控件,它是一个专门针对多选功能的下拉组合框。 WPF 是微软提供的一种用于构建桌面应用的UI框架,它基于.NET Framework,提供了丰富的图形层和...
本文将深入探讨如何创建一个自定义的多选下拉框控件,以提升用户体验,并利用Ajax技术实现异步更新,提高页面的响应速度。 一、多选下拉框控件的理解 多选下拉框控件是一种允许用户从一系列选项中选择多个值的UI...
继承自C# Winform中ComboBox的下拉多选控件,操作简单,效果非常好 1、多选。 2、可绑定List,DataTable,Dictionary类型的数据源。 3、在下拉列表中可显示自定义的多列数据。 4、可在下拉列表中通过输入关键字,...
ASP.NET 下拉多选控件是一种常见的Web开发组件,它允许用户在下拉菜单中选择一个或多个选项。这种控件在数据输入、过滤或设置首选项时非常有用,尤其适用于空间有限或需要简洁界面的设计。在ASP.NET框架中,我们可以...
在这个场景中,"js日历控件日期多选Kalendajs" 提供了一种功能强大的解决方案,允许用户在日历上选择多个日期,甚至可以跨越多个月份。 Kalendajs是一款专门设计的日历插件,它具有日期多选功能,可以极大地提升...
WPF的树形控件(TreeView)默认情况下只允许单选,但是通过自定义控件样式和行为,我们可以扩展其功能以支持多选。首先,我们需要为TreeView项模板(TreeViewItemTemplate)添加一个多选框(CheckBox),这样用户就...
DEV控件库提供了多种控件,包括布局控件(layoutControl)、多选控件(CheckedComboBoxEdit)、单选控件(comboBoxEdit)以及日期时间控件(DateEdit)。在这篇文章中,我们将深入探讨这些控件的使用方法和技巧。 ...
在Swing中,我们可以通过多种组件来创建丰富的交互式应用,其中包括用于实现多选功能的控件。本篇文章将深入探讨Swing中的多选栏控件及其使用方法。 在Swing中,多选栏通常指的是`JList`或`JTable`控件,它们允许...
本教程将详细讲解如何利用jQuery技术制作一款简洁且功能强大的日期日历控件,该控件支持多选日期,允许用户方便地选择开始和结束时间。这种控件的应用场景广泛,例如在预订系统、事件安排或数据分析中,可以极大地...
多选日期,以逗号隔开,选择后,还可以取消选择
在C# WinForm开发中,有时我们需要创建具有更...这样,我们就创建了一个具备全选/全取消功能的C# WinForm下拉多选自定义控件。这个控件可以方便地集成到各种WinForm应用程序中,提高开发效率,提供更好的用户交互体验。
1. **多选模式**:Kalendae.js的一大亮点就是支持多选日期,用户可以同时选择多个日期,这对于需要处理一系列日期的场景非常有用,例如行程安排或者活动规划。 2. **时间选择**:除了基本的日期选择,Kalendae.js还...
在C# Winform开发中,有时我们需要创建一个功能丰富的下拉多选控件,以满足更复杂的用户交互需求。这个自定义控件是基于标准的ComboBox控件进行重定义和扩展,提供了许多实用的功能,包括单选/多选、显示多列数据、...
在JavaScript编程中,日期多选控件是一种常见且实用的功能,尤其在开发Web应用程序时,如日程管理、在线预订或报表生成等场景。本文将深入探讨如何利用JS实现这样的功能,包括连续选择日期和多个月份的选择。 首先...
今天在做一个项目的时候, 需要一个多选日期控件, 在网上搜索了一大圈都不理想。最后狠心自己写了一个。 可以实现日期多选,点选, AJAX上传和更新等。 AJAX放我已经注释掉,如果你需要的话 可以稍作修改。
"多选的树控件"是一种常见的用户界面元素,它允许用户在一个层次结构的数据结构中进行选择,而且支持选择一个以上的项目。这种控件广泛应用于文件管理器、设置菜单、数据库管理工具等多个场景。 首先,我们需要理解...