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,第二个参数是点击日期 ...
随机推荐
- RSA/DSA 密钥的工作原理
下面从整体上粗略的介绍了 RSA/DSA 密钥的工作原理.让我们从一种假想的情形开始,假定我们想用 RSA 认证允许一台本地的 Linux 工作站(称作 localbox)打开 remotebox 上 ...
- (八)Oracle学习笔记—— 触发器
1. 触发器简介 触发器在数据库里以独立的对象存储,类似于过程(procedure)和函数(function),都有声明,执行和异常处理过程的PL/SQL块.它与存储过程和函数不同的是,存储过程与函数 ...
- myBatis的引出
jdbc 优点:简单易学,上手快,非常灵活构建sql,效率高. l缺点:代码繁琐,难以写出高质量的代码(资源的释放,SQL注入安全性等),开发者关注多,又要写业务逻辑,又要关注对象的创建和销毁. Hi ...
- Android开发——跟随手指的小球实现
今天要实现的是一个跟随手指的小球,说白了就是让小球按着手指滑动的轨迹运动,实现起来还是比较容易的. 用到的类是drawView,我们先自定义一个DrawView组件. DrawView.java: ...
- git问题:git提交的时候总是提示key加载失败,总是需要手工将key加到Pageant中
问题描述: 重装过一次系统,在重装之前git+tortoisegit配合很好,提交的时候都能自动加载ppk,但是重装系统后,也重新生成pulic key上传到了服务器,但是每次提交的时候都提示key加 ...
- Team Foundation Server安装指南(转载)
1.说明 Team Foundation Server(以下简称VSTF)的安装并不是一件轻松的事情,在安装的过程中相信很多人都或多或少碰到一些问题而安装不成功,虽然手头有微软提供的所谓安装手册,也曾 ...
- 从12306网站新验证码看Web验证码设计与破解
2015年3月16日,铁路官方购票网站12306又出新招,在登录界面推出了全新的验证方式,用户在填写好登录名和密码之后,还要准确的选取图片验证码才能登陆成功.据悉,12306验证码改版后,目前所有抢票 ...
- 如何解决MySQL连接超时关闭
最近做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到M ...
- bitnami-redmineserver迁移
1. 背景 在Redmineserver迁移过程中.假设前后两个Redmine的版本号一样,事情就简单,假设版本号不一样,就有可能面临两个版本号数据库不兼容.那就比較麻烦了.本文旨在介绍数据库不兼容时 ...
- Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结 1. Base64编码, 1 2. Base64实现转换原理1 3. ...