JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】

下面是详细的攻略:

一、概述

该功能主要实现了自动生成年月范围选择,方便用户从一个日期范围中选择具体的日期。

本文将通过使用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插件的方式实现自动生成年月范围选择。具体实现过程如下:

  1. 添加依赖库

我们需要引入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>
  1. 编写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);
  1. 添加自定义函数
$.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;
  }

  // ...

};
  1. 调用自定义函数
(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);

五、使用示例

我们可以使用以下方法来调用自动选择年月范围的日期选择器。

  1. 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>
  1. 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技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript Demo模态窗口

    下面是关于JavaScript Demo模态窗口的完整攻略: 简介 Demo模态窗口是一种常见的Web开发技术,用于在页面中显示交互式传达信息、获取用户反馈等操作。本文将详细介绍如何使用JavaScript实现Demo模态窗口。 实现方式一:使用HTML和CSS HTML部分 首先在页面中加入一块隐藏的HTML代码块,用于存放模态窗口的结构,例如: <…

    JavaScript 2023年6月10日
    00
  • html页面展示json数据并格式化的方法

    展示 JSON 数据并格式化,通常有以下两种方法: 方法一:通过 JavaScript 进行格式化 通过 JavaScript 获取到 JSON 数据之后,可以使用 JSON 的 stringify 方法进行格式化,再将格式化后的结果插入到 HTML 页面中即可。 示例代码: <!DOCTYPE html> <html> <he…

    JavaScript 2023年5月27日
    00
  • JS动态给对象添加属性和值的实现方法

    下面是关于“JS动态给对象添加属性和值的实现方法”的完整攻略: 方式一:使用点运算符添加属性 使用点运算符添加属性非常简单,只需要在对象后加上”.”,紧接着加上新增的属性名,再赋予一个值即可。 示例一: let person = { name: ‘张三’, age: 25 }; person.gender = ‘男’; console.log(person)…

    JavaScript 2023年5月27日
    00
  • 鼠标事件延时切换插件

    鼠标事件延时切换插件攻略 插件介绍 鼠标事件延时切换插件是一款基于jQuery库实现的插件,可以实现在鼠标停留在某一元素上时,延时展示该元素的内容,并在鼠标离开该元素后,自动隐藏该元素的内容,从而提高页面的交互性。 插件使用方法 引入jQuery库和鼠标事件延时切换插件的js文件 <script src="https://cdn.bootcd…

    JavaScript 2023年6月11日
    00
  • JS简单循环遍历json数组的方法

    JS简单循环遍历json数组的方法,通常使用for循环来实现。下面我将详细讲解以下步骤: 1. 获取JSON数组 首先,我们需要获取JSON数组,可以通过以下方式获取: const jsonArr = [ { "name": "张三", "age": 18, "gender": …

    JavaScript 2023年5月27日
    00
  • JS数组方法push()、pop()用法实例分析

    JS数组方法push()、pop()用法实例分析 push()方法 push() 方法将一个或多个元素添加到数组的末尾,并返回新数组的长度。 语法 arr.push(element1[, …[, elementN]]) 参数 element1[, …[, elementN]]: 要添加到数组末尾的一个或多个元素。 返回值 数组新的长度 示例 cons…

    JavaScript 2023年5月28日
    00
  • 在nuxt中使用路由重定向的实例

    下面我将为你讲解在Nuxt中使用路由重定向的实例攻略。 什么是路由重定向? 路由重定向是浏览器在访问某个页面时,将页面地址自动跳转到另一个地址的技术,也叫URL重定向。 在Nuxt中,路由重定向可以通过使用 Nuxt.js 提供的插件实现,其中就包括 @nuxtjs/redirect-module 插件。 安装@nuxtjs/redirect-module插…

    JavaScript 2023年6月11日
    00
  • 基于原生JavaScript实现SPA单页应用

    基于原生JavaScript实现SPA单页应用攻略 简介 单页应用(Single Page Application,SPA)是一种基于Web浏览器的应用程序,整个应用程序只有一个HTML文件,页面切换时通过ajax与后端进行数据交互,然后动态更新Dom元素,从而实现页面的切换。 原生JavaScript是指不依赖第三方框架或库,只使用纯JavaScript进…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部