js实现符合国情的日期插件详解


Posted in Javascript onJanuary 19, 2017

这次开始的项目是PC版的,貌似有2年没正儿八经的折腾PC端了。

言归正传,这次功能中有个选择日期段的功能,本来不麻烦的事情,但是PM非要参照另外一个网站的效果来做,把别人代码扒下来一看,我去,08年的插件,很多功能不能满足当前,PM非要那效果,时间又TM有限,就又找了个国外的插件daterangepicker,基于bootstrap,跟需求长得很像,功能非常强大,需求都能满足,但是...但是,PM和测试说不好用。。。折腾了半天源代码,优化了下,时间来不及只能凑合用着。

重新动手写了个。依赖jquery和moment.js(主要处理日期,如果自己处理也可以不需要),

先看效果图

 js实现符合国情的日期插件详解

使用方法:

var daterangepicker = new DateRangePicker();
daterangepicker.init({
 "ele": $("#daterange"),
 "pos":"left",
 "min_date": "1990-01-01",
 "format": "YYYY:MM:DD",
 "updateDateFn":function(){
 console.log(daterangepicker.getDate())
 }
});

基本思路是:

创建一个日期选择构造函数

function DateRangePicker() {
this.start_picker = null;
this.end_picker = null;
}

初始化日期构造函数,日期段由两个单独的日期选择组成,当起始日期和结束日期变化时要调用构造函数的updateDate方法,通知日期发生了变化。

DateRangePicker.prototype.init = function(opts) {
 var self = this;
 this.opts = $.extend({
 "pos":"left",//日历位置,靠左或靠右
 "min_date":"1970-01-01",//最小日期
 "updateDateFn":function(){//日期更新回调
 }
 }, opts || {});
 this.createCalendarWrap();
 this.$wrap=this.opts.ele.parents(".ui-datepicker");
 this.start_picker = new DatePicker();//起始日期日历
 this.end_picker = new DatePicker();//结束日期日历
 this.start_picker.init({
 "container": this.$wrap.find(".calendar-container"),
 "min_date":self.opts.min_date,
 "yearOffset": 20,
 "updateCallback": function(){
 self.updateDate();
 }
 });
 this.end_picker.init({
 "container": this.$wrap.find(".calendar-container2"),
 "yearOffset": 20,
 "min_date":self.opts.min_date,
 "updateCallback": function(){
 self.updateDate();
 }
 });
 this.bindEvent();
};

处理日期发生变化的情况,比如起始日期大于结束日期,要进行互换。

DateRangePicker.prototype.updateDate = function() {
 var self = this;
 var start_date = moment(self.start_picker.currentDate).format(self.opts.format);
 var end_date = moment(self.end_picker.currentDate).format(self.opts.format);
 var start_date_time=new Date(self.start_picker.currentDate).getTime();
 var end_date_time=new Date(self.end_picker.currentDate).getTime();
 if(start_date_time>new Date().getTime()){
 self.start_picker.setCurrentDate(new Date());
 }
 if(end_date_time>new Date().getTime()){
 self.end_picker.setCurrentDate(new Date());
 }
 if(start_date_time>end_date_time){
 self.opts.ele.val(end_date + "~" + start_date);
 }else{
 self.opts.ele.val(start_date + "~" + end_date);
 }
 $(".ui-daterangepicker-range li").removeClass("active");
 self.opts.updateDateFn.call(null,this.getDate());//日期更新后重新获取当前的起始和结束日期
};

获取起始和结束日期

//获取起始日期和结束日期段,起始日期若大于结束日期则互换
DateRangePicker.prototype.getDate = function() {
 var start_date=Math.min(this.start_picker.currentDate.getTime(),this.end_picker.currentDate.getTime());
 var end_date=Math.max(this.start_picker.currentDate.getTime(),this.end_picker.currentDate.getTime());
 start_date=moment(start_date).format(this.opts.format);
 end_date=moment(end_date).format(this.opts.format);
 return {
 "start_date":start_date,
 "end_date": end_date
 };
};

提供动态设置当前起始日期和结束日期的方法

//设置起始日期和结束日期
DateRangePicker.prototype.setDate = function(start_date, end_date) {
 this.start_picker.setCurrentDate(new Date(start_date));
 this.end_picker.setCurrentDate(new Date(end_date));
 this.updateDate();
};

创建一个容器,因为日期选择要刚好在日期文本框下面,在日期文本框外面包一层方便定位。

//创建日期段容器
DateRangePicker.prototype.createCalendarWrap = function() {
 var $parent=this.opts.ele.parents(".ui-datepicker");
 var h=$parent.height(),w=$parent.width();
 var wrap = '<div class="ui-daterangepicker-wrap" style="top:'+h+'px;'+this.opts.pos+':0"><div class="ui-calendar"><p class="calendar-title">开始日期</p><div class="calendar-container"></div></div>' +
 '<div class="ui-calendar"><p class="calendar-title">结束日期</p><div class="calendar-container2"></div></div>' +
 '<div class="ui-daterangepicker-range"><ul>' +
 '<li range-key="今日">今日</li>' +
 '<li range-key="昨日">昨日</li>' +
 '<li range-key="最近7日">最近7日</li>' +
 '<li range-key="最近30日">最近30日</li>' +
 '</ul>' +
 '</div></div>';
 $parent.append(wrap);
};

接下来是单个日期选择的处理

定义构造函数和初始化

function DatePicker() {
 this.opts = null;
 this.today = new Date(); //今天
 this.todayDate=this.today.getDate();
 this.currentDate = new Date(); //当前选中日期
}
DatePicker.prototype.init = function(opts) {
 var opts = $.extend({
 'min_date':"1970-01-01",
 "yearOffset": 20//默认往前推20年
 }, opts || {});
 this.opts = opts;
 this.renderCalendar();
 this.bindEvent();
};

事件处理

DatePicker.prototype.bindEvent = function() {
 var self = this;
 self.opts.container.on("change", ".year-select", function() {
 self.renderSelectedDate();
 });
 //选中月份
 self.opts.container.on("change", ".month-select", function() {
 self.renderSelectedDate();
 });
 //下一月
 self.opts.container.on("click", ".next-btn", function(e) {
 e.stopPropagation();
 var cur_date =self.currentDate.setMonth(self.currentDate.getMonth()+1);;
 self.setCurrentDate(cur_date);
 });
 //上一月
 self.opts.container.on("click", ".prev-btn", function(e) {
 e.stopPropagation();
 var cur_date = self.currentDate.setMonth(self.currentDate.getMonth()-1);
 self.setCurrentDate(cur_date);
 });
 //选择日历中某一天
 self.opts.container.on("click", ".date-item", function() {
 if (!$(this).hasClass("disabled")) {
 var _day = $(this).attr("date");
 var cur_date = self.currentDate.setDate(_day);
 self.setCurrentDate(cur_date);
 }
 });
};

定义临时存储的当前日期,默认日期是今天,但是选择的时候当前日期会变化。

//临时被选中的日期
DatePicker.prototype.tempActiveDate=(function(){
 var _date=new Date();
 return {
 getDate: function() {
 return _date;
 },
 setDate:function(date){
 _date=new Date(date);
 }
 };
})();

年月下拉框变化时更新日期

//设置下拉框选中的日期
DatePicker.prototype.renderSelectedDate = function() {
 var _year = this.opts.container.find(".year-select").val();
 var _month = this.opts.container.find(".month-select").val();
 var _day = this.currentDate.getDate();
 var cur_date = new Date(_year, _month, _day);
 this.setCurrentDate(cur_date);
};

渲染日历框架,日历固定为42格,7列6行,星期从一到天

//渲染日历框架
DatePicker.prototype.renderCalendar = function() {
 var calendar_header = this.renderHeader();
 var calendar_days = '<table class="calendar-table"><thead><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr></thead>';
 var calendar_body = '<tbody class="calendar_body">';
 for (var i = 0; i < 6; i++) {
 calendar_body += '<tr><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td></tr>';
 }
 calendar_body + '</tbody></table>';
 this.opts.container.html(calendar_header + calendar_days + calendar_body);
 this.renderCalendarData();
};

渲染日历的头部,包括上月、下月按钮,年月的下拉框

//渲染日历头部
DatePicker.prototype.renderHeader = function() {
 var _year = this.today.getFullYear();
 var _month = this.today.getMonth() + 1;
 var current_year = this.currentDate.getFullYear();
 var current_month = this.currentDate.getMonth();
 var monthArr = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"];
 var min_year=(new Date(this.opts.min_date)).getFullYear();//最小年份
 var start_year=current_year - this.opts.yearOffset>=min_year?current_year - this.opts.yearOffset:min_year;//下拉框起始年份
 var yearSelect="";
 //如果已经是最小日期,不显示上月按钮
 if (current_year <= min_year && current_month <= 0) {
 yearSelect+='<select class="year-select">';
 }else{
 yearSelect = '<span class="prev-btn"><</span> <select class="year-select">';
 }
 for (var i =start_year; i <= _year; i++) {
 if (i == current_year) {
 yearSelect += '<option value="' + i + '" selected>' + i + '</option>';
 } else {
 yearSelect += '<option value="' + i + '">' + i + '</option>';
 }
 }
 yearSelect += '</select>';
 var monthSelect = '<select class="month-select">';
 for (var i = 0; i < 12; i++) {
 var state="";
 if (current_year < _year) {
 if (i == current_month) {
 state="selected";
 }
 }else if (current_year == _year) {
 if(i==current_month){
 state="selected";
 }else{
 state="disabled";
 }
 }else{
 state="disabled";
 }
 monthSelect += '<option value="' + i + '" '+state+'>' + monthArr[i] + '月</option>';
 }
 if (current_year >= _year && current_month+1 >= _month) {
 monthSelect += '</select>';
 }else{
 monthSelect += '</select><span class="next-btn">></span>';
 }
 return "<div class='calendar_header'>" + yearSelect + monthSelect + "</div>";
};
//渲染日历数据
DatePicker.prototype.renderCalendarData = function() {
 var self = this;
 var _year = this.currentDate.getFullYear(); //当前年
 var _month = this.currentDate.getMonth() + 1; //当前月
 var _firstDay = new Date(_year, _month - 1, 1); //当前月第一天
 var tds = this.opts.container.find(".calendar_body td");
 var header = self.renderHeader();
 this.opts.container.find(".calendar_header").html(header);
 tds.each(function(index, item) {
 var _thisDate = new Date(_year, _month - 1, index + 1 - _firstDay.getDay());
 var _thisDay = _thisDate.getDate();
 var _thisMonth = _thisDate.getMonth() + 1;
 var _thisDateTime=_thisDate.getTime();
 $(item).html(_thisDay).attr("date", _thisDay).removeClass("active").removeClass("disabled").removeClass("today");
 //当前月并且当前选中日期高亮
 if (_thisDay == self.tempActiveDate.getDate().getDate() && _thisMonth == _month) {
 $(item).addClass("active");
 }
 //今天日期样式
 if (_thisDay == self.todayDate) {
 $(item).addClass("today");
 }
 //非当前月或者大于今天的日期禁用
 if (_thisMonth !== _month || _thisDateTime>self.today.getTime()) {
 $(item).addClass("disabled").removeClass('active today');
 }
 //如果选择的日期大于今天,则日期重置
 if (_thisDateTime>self.today.getTime() && _thisDay == self.todayDate) {
 $(item).addClass("active");
 self.currentDate = _thisDate;
 }
 });
};
//设置当前日期
DatePicker.prototype.setCurrentDate = function(date) {
 this.tempActiveDate.setDate(date);
 this.currentDate = this.tempActiveDate.getDate();
 this.renderCalendarData();
 if(this.opts.updateCallback){
 this.opts.updateCallback.call(null,this.currentDate);
 }
};

js完整代码

function DatePicker() {
 this.opts = null;
 this.today = new Date(); //今天
 this.todayDate=this.today.getDate();
 this.currentDate = new Date(); //当前选中日期
}
DatePicker.prototype.init = function(opts) {
 var opts = $.extend({
 'min_date':"1970-01-01",
 "yearOffset": 20//默认往前推20年
 }, opts || {});
 this.opts = opts;
 this.renderCalendar();
 this.bindEvent();
};
DatePicker.prototype.bindEvent = function() {
 var self = this;
 self.opts.container.on("change", ".year-select", function() {
 self.renderSelectedDate();
 });
 //选中月份
 self.opts.container.on("change", ".month-select", function() {
 self.renderSelectedDate();
 });
 //下一月
 self.opts.container.on("click", ".next-btn", function(e) {
 e.stopPropagation();
 var cur_date =self.currentDate.setMonth(self.currentDate.getMonth()+1);;
 self.setCurrentDate(cur_date);
 });
 //上一月
 self.opts.container.on("click", ".prev-btn", function(e) {
 e.stopPropagation();
 var cur_date = self.currentDate.setMonth(self.currentDate.getMonth()-1);
 self.setCurrentDate(cur_date);
 });
 //选择日历中某一天
 self.opts.container.on("click", ".date-item", function() {
 if (!$(this).hasClass("disabled")) {
 var _day = $(this).attr("date");
 var cur_date = self.currentDate.setDate(_day);
 self.setCurrentDate(cur_date);
 }
 });
};
//临时被选中的日期
DatePicker.prototype.tempActiveDate=(function(){
 var _date=new Date();
 return {
 getDate: function() {
 return _date;
 },
 setDate:function(date){
 _date=new Date(date);
 }
 };
})();
//设置下拉框选中的日期
DatePicker.prototype.renderSelectedDate = function() {
 var _year = this.opts.container.find(".year-select").val();
 var _month = this.opts.container.find(".month-select").val();
 var _day = this.currentDate.getDate();
 var cur_date = new Date(_year, _month, _day);
 this.setCurrentDate(cur_date);
};
//渲染日历框架
DatePicker.prototype.renderCalendar = function() {
 var calendar_header = this.renderHeader();
 var calendar_days = '<table class="calendar-table"><thead><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr></thead>';
 var calendar_body = '<tbody class="calendar_body">';
 for (var i = 0; i < 6; i++) {
 calendar_body += '<tr><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td><td class="date-item"></td></tr>';
 }
 calendar_body + '</tbody></table>';
 this.opts.container.html(calendar_header + calendar_days + calendar_body);
 this.renderCalendarData();
};
//渲染日历头部
DatePicker.prototype.renderHeader = function() {
 var _year = this.today.getFullYear();
 var _month = this.today.getMonth() + 1;
 var current_year = this.currentDate.getFullYear();
 var current_month = this.currentDate.getMonth();
 var monthArr = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"];
 var min_year=(new Date(this.opts.min_date)).getFullYear();//最小年份
 var start_year=current_year - this.opts.yearOffset>=min_year?current_year - this.opts.yearOffset:min_year;//下拉框起始年份
 var yearSelect="";
 //如果已经是最小日期,不显示上月按钮
 if (current_year <= min_year && current_month <= 0) {
 yearSelect+='<select class="year-select">';
 }else{
 yearSelect = '<span class="prev-btn"><</span> <select class="year-select">';
 }
 for (var i =start_year; i <= _year; i++) {
 if (i == current_year) {
 yearSelect += '<option value="' + i + '" selected>' + i + '</option>';
 } else {
 yearSelect += '<option value="' + i + '">' + i + '</option>';
 }
 }
 yearSelect += '</select>';
 var monthSelect = '<select class="month-select">';
 for (var i = 0; i < 12; i++) {
 var state="";
 if (current_year < _year) {
 if (i == current_month) {
 state="selected";
 }
 }else if (current_year == _year) {
 if(i==current_month){
 state="selected";
 }else{
 state="disabled";
 }
 }else{
 state="disabled";
 }
 monthSelect += '<option value="' + i + '" '+state+'>' + monthArr[i] + '月</option>';
 }
 if (current_year >= _year && current_month+1 >= _month) {
 monthSelect += '</select>';
 }else{
 monthSelect += '</select><span class="next-btn">></span>';
 }
 return "<div class='calendar_header'>" + yearSelect + monthSelect + "</div>";
};
//渲染日历数据
DatePicker.prototype.renderCalendarData = function() {
 var self = this;
 var _year = this.currentDate.getFullYear(); //当前年
 var _month = this.currentDate.getMonth() + 1; //当前月
 var _firstDay = new Date(_year, _month - 1, 1); //当前月第一天
 var tds = this.opts.container.find(".calendar_body td");
 var header = self.renderHeader();
 this.opts.container.find(".calendar_header").html(header);
 tds.each(function(index, item) {
 var _thisDate = new Date(_year, _month - 1, index + 1 - _firstDay.getDay());
 var _thisDay = _thisDate.getDate();
 var _thisMonth = _thisDate.getMonth() + 1;
 var _thisDateTime=_thisDate.getTime();
 $(item).html(_thisDay).attr("date", _thisDay).removeClass("active").removeClass("disabled").removeClass("today");
 //当前月并且当前选中日期高亮
 if (_thisDay == self.tempActiveDate.getDate().getDate() && _thisMonth == _month) {
 $(item).addClass("active");
 }
 //今天日期样式
 if (_thisDay == self.todayDate) {
 $(item).addClass("today");
 }
 //非当前月或者大于今天的日期禁用
 if (_thisMonth !== _month || _thisDateTime>self.today.getTime()) {
 $(item).addClass("disabled").removeClass('active today');
 }
 //如果选择的日期大于今天,则日期重置
 if (_thisDateTime>self.today.getTime() && _thisDay == self.todayDate) {
 $(item).addClass("active");
 self.currentDate = _thisDate;
 }
 });
};
//设置当前日期
DatePicker.prototype.setCurrentDate = function(date) {
 this.tempActiveDate.setDate(date);
 this.currentDate = this.tempActiveDate.getDate();
 this.renderCalendarData();
 if(this.opts.updateCallback){
 this.opts.updateCallback.call(null,this.currentDate);
 }
};

//日期段由两个单独日期实例组成
function DateRangePicker() {
 this.start_picker = null;
 this.end_picker = null;
}
DateRangePicker.prototype.init = function(opts) {
 var self = this;
 this.opts = $.extend({
 "pos":"left",//日历位置,靠左或靠右
 "min_date":"1970-01-01",//最小日期
 "updateDateFn":function(){//日期更新回调
 
 }
 }, opts || {});
 this.createCalendarWrap();
 this.$wrap=this.opts.ele.parents(".ui-datepicker");
 this.start_picker = new DatePicker();
 this.end_picker = new DatePicker();
 this.start_picker.init({
 "container": this.$wrap.find(".calendar-container"),
 "min_date":self.opts.min_date,
 "yearOffset": 20,
 "updateCallback": function(){
 self.updateDate();
 }
 });
 this.end_picker.init({
 "container": this.$wrap.find(".calendar-container2"),
 "yearOffset": 20,
 "min_date":self.opts.min_date,
 "updateCallback": function(){
 self.updateDate();
 }
 });
 this.bindEvent();
};
DateRangePicker.prototype.bindEvent = function() {
 var self = this;
 var start_picker = self.start_picker,
 end_picker = self.end_picker;
 this.opts.ele.on("focus",function(){
 self.$wrap.find(".ui-daterangepicker-wrap").show();
 });
 $(".ui-daterangepicker-range").on("click", "[range-key]", function() {
 var _year = start_picker.currentDate.getFullYear();
 var _month = start_picker.currentDate.getMonth();
 var range = $(this).attr("range-key");
 var start_day = start_picker.todayDate,
 end_day = end_picker.todayDate
 switch (range) {
 case "今日":
 start_day = new Date(moment());
 break;
 case "昨日":
 start_day = new Date(moment().subtract(1, 'days'));
 break;
 case "最近7日":
 start_day = new Date(moment().subtract(6, 'days'));
 break;
 case "最近30日":
 start_day = new Date(moment().subtract(30, 'days'));
 break;
 }
 self.setDate(start_day,new Date())
 $(this).addClass("active").siblings("[range-key]").removeClass("active");
 });
 $("html").on("click",function(e){
 var $target=$(e.target);
 if($target.closest(".ui-daterangepicker-wrap").length==0&&$target[0]!=self.opts.ele[0]){
 self.$wrap.find(".ui-daterangepicker-wrap").hide();
 }
 });
};
DateRangePicker.prototype.updateDate = function() {
 var self = this;
 var start_date = moment(self.start_picker.currentDate).format(self.opts.format);
 var end_date = moment(self.end_picker.currentDate).format(self.opts.format);
 var start_date_time=new Date(self.start_picker.currentDate).getTime();
 var end_date_time=new Date(self.end_picker.currentDate).getTime();
 if(start_date_time>new Date().getTime()){
 self.start_picker.setCurrentDate(new Date());
 }
 if(end_date_time>new Date().getTime()){
 self.end_picker.setCurrentDate(new Date());
 }
 if(start_date_time>end_date_time){
 self.opts.ele.val(end_date + "~" + start_date);
 }else{
 self.opts.ele.val(start_date + "~" + end_date);
 }
 $(".ui-daterangepicker-range li").removeClass("active");
 self.opts.updateDateFn.call(null,this.getDate());
};
//获取起始日期和结束日期段,起始日期若大于结束日期则互换
DateRangePicker.prototype.getDate = function() {
 var start_date=Math.min(this.start_picker.currentDate.getTime(),this.end_picker.currentDate.getTime());
 var end_date=Math.max(this.start_picker.currentDate.getTime(),this.end_picker.currentDate.getTime());
 start_date=moment(start_date).format(this.opts.format);
 end_date=moment(end_date).format(this.opts.format);
 return {
 "start_date":start_date,
 "end_date": end_date
 };
};
//设置起始日期和结束日期
DateRangePicker.prototype.setDate = function(start_date, end_date) {
 this.start_picker.setCurrentDate(new Date(start_date));
 this.end_picker.setCurrentDate(new Date(end_date));
 this.updateDate();
};
//创建日期段容器
DateRangePicker.prototype.createCalendarWrap = function() {
 var $parent=this.opts.ele.parents(".ui-datepicker");
 var h=$parent.height(),w=$parent.width();
 var wrap = '<div class="ui-daterangepicker-wrap" style="top:'+h+'px;'+this.opts.pos+':0"><div class="ui-calendar"><p class="calendar-title">开始日期</p><div class="calendar-container"></div></div>' +
 '<div class="ui-calendar"><p class="calendar-title">结束日期</p><div class="calendar-container2"></div></div>' +
 '<div class="ui-daterangepicker-range"><ul>' +
 '<li range-key="今日">今日</li>' +
 '<li range-key="昨日">昨日</li>' +
 '<li range-key="最近7日">最近7日</li>' +
 '<li range-key="最近30日">最近30日</li>' +
 '</ul>' +
 '</div></div>';
 $parent.append(wrap);
};
var daterangepicker = new DateRangePicker();
daterangepicker.init({
 "ele": $("#daterange"),
 "pos":"left",
 "min_date": "1990-01-01",
 "format": "YYYY:MM:DD",
 "updateDateFn":function(){
 console.log(daterangepicker.getDate())
 }
});

HTML:

<div class="ui-datepicker">
 <input type="text" id="daterange" placeholder="请选择日期"/>
</div>

CSS

* {
 margin: 0;
 padding: 0;
}
body{font:14px "微软雅黑";}
li {
 list-style: none;
}
.ui-datepicker{
 display: inline-block;
 position: relative;
}
.ui-calendar {
 margin: 10px;
 width: 260px;
}
.single-calendar{
 border:1px solid #ccc;
 text-align: center;
 box-shadow: 0 0 3px rgba(0,0,0,0.25);
}
.ui-calendar select {
 padding: 3px 10px;
 margin: 0 10px;
}
.calendar_header {
 margin: 10px 0;
 text-align: center;
}
.calendar-table {
 border-collapse: collapse;
}
.calendar-table td {
 padding: 5px 10px;
 cursor: pointer;
 text-align: center;
 border-radius:3px;
}
.calendar-table td.today {
 color: #337ab7;
}
.calendar-table td.active {
 background: #337ab7;
 color:#fff;
}
.calendar-table td.disabled {
 color: #ccc;
 cursor: default;
}
.ui-calendar .next-btn,
.ui-calendar .prev-btn {
 padding:1px 4px;
 border:1px solid transparent;
 border-radius:3px;
 font-weight: bold;
 cursor: pointer;
}
.ui-calendar .next-btn:hover,.ui-calendar .prev-btn:hover{
 border-color:#ccc;
 box-shadow: 0 0 3px rgba(0,0,0,0.25);
}
.ui-daterangepicker-wrap {
 position: absolute;
 top:0;
 width: 740px;
 border: 1px solid #ccc;
 border-radius:3px;
 box-shadow: 0 0 3px rgba(0,0,0,0.25);
 background: #fff;
 overflow: hidden;
 z-index:1000;
 display: none;
}
.calendar-title{
 text-align: center;
}
.ui-daterangepicker-wrap .ui-calendar {
 float: left;
}
.ui-daterangepicker-range{
 width: 150px;
 float: right;
 margin: 10px;
}
.ui-daterangepicker-range ul{
 margin-bottom:20px;
}
.ui-daterangepicker-range li {
 margin:5px 0;
 padding: 5px 10px;
 border-radius:3px;
 background: #f5f5f5;
 cursor: pointer;
}
.ui-daterangepicker-range li:hover,.ui-daterangepicker-range li.active {
 background: #337ab7;
 color:#fff;
}
.ui-daterangepicker-range .range-btn{
 width:60px;
 height: 30px;
 margin-right: 10px;
 border:1px solid #e5e5e5;
 border-radius:3px;
 background: none;
 cursor: pointer;
}
.ui-daterangepicker-range .range-confirm{
 background: #337ab7;
 border-color:#337ab7;
 color:#fff;
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 Javascript
Prototype Template对象 学习
Jul 19 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
Apr 03 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
Jquery promise实现一张一张加载图片
Nov 13 Javascript
javascript电商网站抢购倒计时效果实现
Nov 19 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
小程序实现分类页
Jul 12 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
如何修改Vue打包后文件的接口地址配置的方法
Apr 22 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 #Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 #Javascript
原生js实现电商侧边导航效果
Jan 19 #Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 #Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 #Javascript
详解前端构建工具gulpjs的使用介绍及技巧
Jan 19 #Javascript
js实现漫天星星效果
Jan 19 #Javascript
You might like
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
layui表格数据重载
2019/07/27 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python中datetime模块参考手册
2017/01/13 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
python实现两个文件夹的同步
2019/08/29 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python内置类型性能分析过程实例
2020/01/29 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
大一学生假期实习的自我评价
2013/10/12 职场文书
英语硕士生求职简历的自我评价
2013/10/15 职场文书
火车来了教学反思
2014/02/11 职场文书
新年团拜会主持词
2014/04/02 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
班级标语大全
2014/06/21 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
学校个人对照检查材料
2014/08/26 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
人与自然的观后感
2015/06/18 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server