jQuery简单日历插件版
先来看demo:http://codepen.io/jonechen/pen/xOgZMz
插件代码:
;
(function($) {
var Calendar = function(ele, options) {
this.ele = ele;
this.opt = options;
this.defaults = {
color: 'blue',
fontsize: '14px',
}
this.obj = $.extend({}, this.defaults, this.opt);
};
Calendar.prototype = {
init: function() {
return this.ele.on("focus", function() {
createEle($(this))
});
}
};
var currentDate = new Date();
var currentYear = currentDate.getFullYear();
var currentMonth = currentDate.getMonth();
function createEle(ele) {
var $parent = ele.parent();
if (!$parent || $parent[0].tagName == "BODY") {
throw "Error: this parent() is not defined";
return
} else {
ele.css("border", "1px solid red");
$parent.css({
padding: 0,
margin: 0,
position: 'relative',
});
if ($("#week").length == 0) {
$parent.append("<div id='week'><h1><span class=\'prev\'><</span><span class=\'content\'>1</span><span class=\'next\'>></span></h1></div>");
$parent.find("#week").css({
position: "absolute",
left: 0,
top: ele.outerHeight(true),
zIndex: 1000,
background: "#fff"
})
weeklist($parent.find("h1"));
var $week = ele.next();
updateDate(currentMonth, $week); //传参数月份
$week.find(".prev").click(function() {
updateDate(--currentMonth, $week);
});
$week.find(".next").click(function() {
updateDate(++currentMonth, $week);
});
}
}
}
function weeklist(ele) {
if (ele.parents($("#week")).find("ul:eq(0)").length == 0) {
ele.after('<ul></ul>');
var weekText = ['日', '一', '二', '三', '四', '五', '六'];
for (var i = 0; i < 7; i++) {
ele.next().append('<li>' + weekText[i] + '</li>')
}
ele.next().after('<ul class=\'calendarList\'></ul>');
}
}
function updateDate(m, obj) {
var activeDate = new Date(currentYear, m, 1); //外面传进来的不断变化的日期对象
var year = activeDate.getFullYear();
var month = activeDate.getMonth();
obj.find(".content").html(year + '年' + (month + 1) + '月');
var $calendarList = obj.find($(".calendarList"));
$calendarList.html("")
var n = 1 - activeDate.getDay();
if (n == 1) {
n = -6;
}
activeDate.setDate(n);
for (var i = 0; i < 42; i++) {
var date = activeDate.getDate();
$calendarList.append('<li>' + date + '</li>');
var $li = $calendarList.find("li");
if (activeDate.getMonth() != month) {
$li.eq(i).css("color", "#ccc");
}
$li.eq(i).attr('data-time', year + "-" + (activeDate.getMonth() + 1) + "-" + date);
$li.eq(i).click(function(event) {
obj.prev().val($(this).attr('data-time'));
obj.prev().css('borderColor', '#ccc')
obj.remove();
});
activeDate.setDate(date + 1);
}
}
$.fn.calendar = function(options) {
var calendares = new Calendar(this, options);
return calendares.init();
}
})(jQuery)
插件调用:
$("#ele").calendar();

浙公网安备 33010602011771号