js封装日历控件
最终效果

代码实现
<script>
$(function () {
$(".j-calendar").calendar({
date: '2017-08-03',
callback: function () {
var date = new Date($(this).attr("year"), $(this).attr("month"), $(this).attr("day"));
alert(date);
},
loadinfo: function () {
var liList = $(".j-calendar").find('li');
$.each(liList, function(i, item) {
if ($(item).attr("day") == "") {
$(item).find(".m-CYwork").html("¥2580");
}
});
}
});
});
</script>
/*
* @author:Cheryl
* @made:2015-12-31
*/ (function (window, $, undefined) {
$.canlendarClass = {
defaults: {
date: new Date(),
canderShwType: "default",
callback: function () { },
loadinfo: function () { }
},
hrtnDay: ,
hrtnOne: ,
hrtnLast: ,
title: "<ul class='m-CYul-tit m-CYul'><li>周日</li><li>周一</li><li>周二</li><li>周三</li><li>周四</li><li>周五</li><li>周六</li></ul>",
canComplete: function (d) {
this.canDayone(d);
this.canDay(d);
},
canDayone: function (d) {
var dayone = new Date(d.getFullYear(), d.getMonth(), );
this.hrtnOne = dayone.getDay();//0 1 2 3 4 5 6
this.canDay(d);
var dayLast = new Date(d.getFullYear(), d.getMonth(), this.hrtnDay);
this.hrtnLast = dayLast.getDay();
},
canDay: function (d) {
var year = d.getFullYear();
var month = d.getMonth() + ;
//判断拥有多少天
switch (month) {
case :; case :; case :; case :; case :; case :; case : this.hrtnDay = ; break;
case :; case :; case :; case : this.hrtnDay = ; break;
case : if (year % == && year % != || year % == ) { this.hrtnDay = ; } else { this.hrtnDay = ; }; break;
default: console.log("请您输入正确的月份。"); break;
}
},
}
$.extend($.fn, {
calendar: function (option) {
if ($(this)[] == null || $(this)[] == undefined) {
return;
};
$.canlendarClass.defaults.canderShwType = "default";
for (var i = ; i < ; i++) {
//参数合并
$.canlendarClass.defaults = $.extend($.canlendarClass.defaults, $.extend(option || {}) || {});
var d = new Date(add(new Date($.canlendarClass.defaults.date) || new Date(), "m", i));
//参数计算
$.canlendarClass.canComplete(d);
//添加
$(this).addChild(d);
}
//给这些li添加方法
$(this).children("li").click(function () {
$(this).addClass("active").siblings("li").removeClass("active");
});
//调用加载数据的方法
$.canlendarClass.defaults.loadinfo();
$(this).children("li").on("click", $.canlendarClass.defaults.callback);
//样式添加|当天标蓝
if ($.canlendarClass.defaults.canderShwType == "small") {
$(this).addClass("s-CY m-CYul");
/*var eqli=$.canlendarClass.hrtnDay<=$.canlendarClass.defaults.day?$.canlendarClass.hrtnDay:$.canlendarClass.defaults.day;
$(this).children("li[day="+eqli+"]").addClass("active");*/
} else {
$(this).addClass("d-CY m-CYul");
};
},
addChild: function (d) { // $(this).html("");
$(this).append(
"<div class=\"yearMonth\">" +
"<h2><span id=\"year\">" + d.getFullYear() + "年</span><span id=\"month\">" + parseInt(d.getMonth() + ) + "月</span></h2>" +
"</div>" +
$.canlendarClass.title);
for (var i = ; i < $.canlendarClass.hrtnOne; i++) {
$(this).append('<li class="noday"></li>');
}; var strsld = "";
switch ($.canlendarClass.defaults.canderShwType) {
case "default":
strsld = "<ul class='m-CYwork'></ul>";
break;
case "small":
strsld = "";
break;
default:
break;
}
for (var i = ; i < $.canlendarClass.hrtnDay; i++) {
$(this).append('<li year="' + (d.getFullYear()) + '" month="' + (d.getMonth() + ) + '" day="' + (i + ) + '"><span>' + (i + ) + '</span>' + strsld + '</li>');
};
for (var i = ; i < ( - $.canlendarClass.hrtnLast) ; i++) {
$(this).append('<li class="noday"></li>');
};
var eqli = $.canlendarClass.hrtnDay <= $.canlendarClass.defaults.day ? $.canlendarClass.hrtnDay : $.canlendarClass.defaults.day;
$(this).children("li[day=" + new Date().getDate() + "]:first").addClass("m-CYtoday"); },
});
})(window, jQuery); var add = function (datetiem, strInterval, Number) {
var dtTmp = datetiem;
switch (strInterval) {
case 's': return new Date(Date.parse(dtTmp) + ( * Number));
case 'n': return new Date(Date.parse(dtTmp) + ( * Number));
case 'h': return new Date(Date.parse(dtTmp) + ( * Number));
case 'd': return new Date(Date.parse(dtTmp) + ( * Number));
case 'w': return new Date(Date.parse(dtTmp) + (( * ) * Number));
case 'q': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number * , dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
case 'm': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, , dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
case 'y': return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
}
}
js封装日历控件的更多相关文章
- 2.23 js处理日历控件(修改readonly属性)
2.23 js处理日历控件(修改readonly属性) 前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如 ...
- JS实现日历控件选择后自动填充
最近在做人事档案的项目,在做项目的初期对B/S这块不是很熟悉,感觉信心不是很强,随着和师哥同组人员的交流后发现,调试程序越来越好了,现在信心是倍增,只要自己自己踏实的去研究.理解代码慢慢的效果就出来了 ...
- JS编写日历控件(支持单日历 双日历 甚至多日历等)
前言: 最近几天都在研究日历控件编写,当然前提我要说明下,当然看过别人写的源码 所以脑子一热 就想用自己的编码方式 来写一套可扩展性 可维护性 性能高点的代码控件出来,就算练习练习下,所以前几天晚上下 ...
- selenium+Python(Js处理日历控件)
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...
- Selenium2学习(十七)-- js处理日历控件(修改readonly属性)
前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...
- selenium webdriver——JS操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如 但是,有的日期控件是readonly的 比如12 ...
- selenium - js日历控件处理
# 13. js处理日历控件 ''' 在web自动化的工程中,日历控制大约分为两种: 1. 可以直接输入日期 2. 通过日历控件选择日期 基本思路: 利用js去掉readonly属性,然后直接输入时间 ...
- TWaver初学实战——如何在TWaver属性表中添加日历控件?
在日期输入框中添加日历控件,是一种非常流行和实用的做法.临渊羡鱼不如退而写代码,今天就看看在TWaver中是如何实现的. 资源准备 TWaver的在线使用文档中,就有TWaver Proper ...
- 自己用js写的两个日历控件
前一阵写了两个日历控件,做了简单的封装,发出来共朋友们参考. 第一个日历控件,条状的日历. (使用方法:调用initBarTime(id,evn),第一个参数是要渲染div的id,第二个参数是点击日期 ...
随机推荐
- Android性能优化典范(一)
2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...
- Android实现小圆点显示未读功能
代码地址如下:http://www.demodashi.com/demo/13541.html 前言 以前我们实现这个功能都是用 BadgeView.java,大体就是将这个java类复制到自己的项目 ...
- 应用zip压缩的javascript以及Egret H5游戏实战
代码地址如下:http://www.demodashi.com/demo/11039.html 主要起因是策划对最快进入登录界面有硬性要求(3秒),那么最开始加载的文件越小越好.对H5的游戏程序进行压 ...
- 移动端页面弹幕小Demo实例说明
代码地址如下:http://www.demodashi.com/demo/11595.html 弹幕小Demo实例地址,点击看效果 写在前面:尝试做了一下弹幕的实例,欢迎提出并指正问题 问题说明: D ...
- 折叠表格思路及遇到的问题(tableView:viewForHeaderInSection:的section从1开始,不是从0开始)
项目需要做了一个类似qq联系人的折叠表格,思路很简单:设置每个section的header,在header上显示组名等信息,然后根据折叠与否,设置每个section中cell的数量,如果折叠,则将之设 ...
- photoshop cs4 破解
第一步:下载完软件,要先解压出来,有1.55G,解压. 第二步:安装时选试用30天的选项,先不要输入注册码,完成安装. 第三步:找到hosts文件,在C:\WINDOWS\system32\drive ...
- 深入研究memcache 特性和限制
深入研究memcache 特性和限制在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 .Memcached 单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多个M ...
- atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结
atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结 剪贴板(ClipBoard)是内存中的一块区域,是Windows内置的一个非常有用 ...
- NSArray、NSMutableArray和NSMutableDictionary的用法
转自:http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt=1 NSArray是静态的数组,就是它所指向的内容是不可改变的,它指向一段内存区域 ...
- spring 多个数据库之间切换
多数据源问题很常见,例如读写分离数据库配置. 原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题. 研究成果如下: 1.首先配置多个datasource [html] v ...