下面是详细的攻略:
一、概述
该功能主要实现了自动生成年月范围选择,方便用户从一个日期范围中选择具体的日期。
本文将通过使用jQuery插件的方式进行实现,具体实现过程会涉及到如下内容:
- HTML5中的input元素;
- CSS样式的设置;
- jQuery插件的编写。
二、HTML代码
本功能主要实现由两个input输入框组成的日期选择器,其中一个为开始日期的选择框,另一个为结束日期的选择框。HTML代码如下:
<!--开始日期选择-->
<div class="date-item">
<label for="beginDate">开始日期:</label>
<input type="date" id="beginDate" placeholder="请选择开始日期" />
</div>
<!--结束日期选择-->
<div class="date-item">
<label for="endDate">结束日期:</label>
<input type="date" id="endDate" placeholder="请选择结束日期" />
</div>
三、CSS样式
为了使日期选择器更加美观易用,我们需要对其进行样式的设置。具体样式代码如下:
/*日期选择器的样式定义*/
.date-item {
margin: 20px 0;
}
.date-item label {
width: 80px;
display: inline-block;
}
input[type=date]::-webkit-inner-spin-button,
input[type=date]::-webkit-calendar-picker-indicator,
input[type=date]::-webkit-clear-button {
display: none;
}
input[type=date] {
height: 36px;
font-size: 18px;
width: 180px;
border: 1px solid #cccccc;
border-radius: 4px;
padding: 5px 10px;
box-sizing: border-box;
}
四、JavaScript实现
接下来,我们将通过使用jQuery插件的方式实现自动生成年月范围选择。具体实现过程如下:
- 添加依赖库
我们需要引入jQuery和相关依赖库。
<!--引入jQuery和所需依赖库-->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/lightpick/4.3.4/css/lightpick.min.css"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/lightpick/4.3.4/js/lightpick.min.js"></script>
- 编写jQuery插件
(function($) {
$.fn.dateRangePicker = function(options) {
var settings = $.extend({
startDate: null,
endDate: null,
minDate: null,
maxDate: null
}, options);
return this.each(function() {
var $this = $(this);
// 配置日期选择器
var picker = new Lightpick({
field: $this[0],
singleDate: false,
format: 'YYYY-MM-DD',
numberOfMonths: 2,
minDate: settings.minDate,
maxDate: settings.maxDate,
onSelect: function(start, end) {
$(settings.startDate).val(start.format('YYYY-MM-DD'));
$(settings.endDate).val(end.format('YYYY-MM-DD'));
}
});
// 点击日期选择器外部,关闭日期选择器
$(document).mouseup(function(e) {
var container = $this.parent();
if (!container.is(e.target) && container.has(e.target).length === 0) {
picker.hide();
}
});
// 如果设置了初始日期,则默认显示初始日期
if (settings.startDate) {
picker.gotoDate(moment(settings.startDate).toDate());
}
});
};
})(jQuery);
- 添加自定义函数
$.fn.dateRangePicker = function(options) {
// ...
// 切割年月范围
function splitRange(range) {
var result = [];
var yearArr = range.split(',');
for (var i = 0; i < yearArr.length; i++) {
var year = yearArr[i].trim();
if (year.indexOf('-') > -1) {
var startYear = year.substring(0, 4);
var endYear = year.substring(5, 9);
result.push([startYear, endYear]);
} else {
result.push([year, year]);
}
}
return result;
}
// 输出年月范围
function printRange(yearRange, monthRange) {
var result = [];
for (var i = 0; i < yearRange.length; i++) {
var startYear = parseInt(yearRange[i][0]);
var endYear = parseInt(yearRange[i][1]);
for (var year = startYear; year <= endYear; year++) {
var startMonth = i === 0 ? parseInt(monthRange[0]) : 1;
var endMonth = i === yearRange.length - 1 ? parseInt(monthRange[1]) : 12;
for (var month = startMonth; month <= endMonth; month++) {
result.push(year + '-' + (month < 10 ? '0' + month : month));
}
}
}
return result;
}
// ...
};
- 调用自定义函数
(function($) {
$.fn.dateRangePicker = function(options) {
// ...
return this.each(function() {
// ...
// 自动选择年月
if (yearRange) {
var yearRangeArr = splitRange(yearRange);
var monthRangeArr = monthRange.split('-');
var months = printRange(yearRangeArr, monthRangeArr);
picker.setHighlightedDates(months);
}
// ...
});
};
})(jQuery);
五、使用示例
我们可以使用以下方法来调用自动选择年月范围的日期选择器。
- HTML代码
<div class="date-item">
<label for="dateRange">年月范围选择:</label>
<input type="text" id="dateRange" placeholder="请选择年月范围" />
</div>
<div class="date-item">
<label for="beginDate">开始日期:</label>
<input type="date" id="beginDate" placeholder="请选择开始日期" />
</div>
<div class="date-item">
<label for="endDate">结束日期:</label>
<input type="date" id="endDate" placeholder="请选择结束日期" />
</div>
- JavaScript代码
// 调用日期选择器
$('#dateRange').dateRangePicker({
startDate: '#beginDate',
endDate: '#endDate',
minDate: moment().subtract(1, 'year').toDate(),
maxDate: new Date(),
yearRange: '2020-2022, 2024',
monthRange: '01-04'
});
上述代码将会在列表中选择2020年到2022年和2024年,1月到4月的所有年月。选定后,开始日期和结束日期的日期范围也将自动设置为所选年月范围内的所有日期。
六、示例说明
以上是一个示例的创建教程,以下为两条代码示例说明。
示例一
需要在网页中使用到一个日期选择器,该选择器包括两个input元素,一个为开始日期的选择输入框,另一个为结束日期的选择输入框。同时,该选择器还要求用户只能选择之前的日期,即不能选择今天之后的日期。以上需要求可以使用以下代码实现:
<!--开始日期选择-->
<div class="date-item">
<label for="beginDate">开始日期:</label>
<input type="date" id="beginDate" placeholder="请选择开始日期" />
</div>
<!--结束日期选择-->
<div class="date-item">
<label for="endDate">结束日期:</label>
<input type="date" id="endDate" placeholder="请选择结束日期" />
</div>
// JavaScript代码
$(function() {
// 禁止选择今天之后的日期
var today = new Date();
$('#beginDate').attr('max', today.toISOString().slice(0, 10));
$('#endDate').attr('max', today.toISOString().slice(0, 10));
});
示例二
需要在网页中使用到一个日期选择器,该选择器要求用户能够在一个给定的年月范围内选择具体的日期,并且选择的范围包括2020年到2022年和2024年并且选择的月份范围是每年1到4月份。 可以使用以下代码实现:
<div class="date-item">
<label for="dateRange">年月范围选择:</label>
<input type="text" id="dateRange" placeholder="请选择年月范围" />
</div>
<div class="date-item">
<label for="beginDate">开始日期:</label>
<input type="date" id="beginDate" placeholder="请选择开始日期" />
</div>
<div class="date-item">
<label for="endDate">结束日期:</label>
<input type="date" id="endDate" placeholder="请选择结束日期" />
</div>
// JavaScript代码
$(function() {
$('#dateRange').dateRangePicker({
startDate: '#beginDate',
endDate: '#endDate',
minDate: moment().subtract(1, 'year').toDate(),
maxDate: new Date(),
yearRange: '2020-2022, 2024',
monthRange: '01-04'
});
});
以上两个示例均是通过HTML和JavaScript代码实现,第一个示例通过禁止选择今天之后的日期实现了对选择范围的限制;第二个示例则是使用了自定义函数,实现了选择某个特定年月范围的限制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】 - Python技术站