【问题标题】:jQuery Datepicker - add class to the first and the last date of a selected rangejQuery Datepicker - 将类添加到选定范围的第一个和最后一个日期
【发布时间】:2021-07-14 22:10:45
【问题描述】:

我正在使用 jQuery 日期选择器http://keith-wood.name/datepick.html

这里是 datepicker 调用的 html 输入:

<input type="text" class="date-picker-input" placeholder="dd/mm/yyyy - dd/mm/yyyy ">

这是我用于 datepicker 初始化的 jquery 代码:

 $('.date-picker-input').datepick({ 
        rangeSelect: true, 
        dateFormat: 'dd/mm/yyyy',
        changeMonth: false,
        prevText: '<',
        nextText: '>',
        showOtherMonths: true,
        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        showTrigger: '#calImg',
     });
  });

我正在使用范围选项,我想将类添加到所选范围的第一个和最后一个日期,以便对它们进行风格化。范围内的日期已经有 .datepick-selected 类,但它们在

元素内,所以我必须通过 jquery 指向它们。这是我为了生成类而尝试的:
$('.datepick-month .datepick-selected:first, .datepick-month .datepick-selected:last').addClass('selected');

但什么也没发生。

目前的样子

我希望它看起来如何

【问题讨论】:

  • 能否显示更多的 html 代码,因为 datepicker 有很多选项
  • .datepick-selected 仅在显示 datepicker 时存在,当插件关闭时,您在 DOM 中看不到它,只有在插件打开时才存在
  • 如果你只想保持选中daye,你可以玩onClose
  • 我已经用截图更新了我的问题。如您所见,选定的“从到”日期有额外的类“datepick-selected”(见我的第一个屏幕截图)。我想仅在第一个和最后一个元素中添加名为“selected”的附加类,其中包含“datepick-selected”类(第二个屏幕截图)。
  • 什么时候执行添加类的命令?我再说一遍,你能显示你的 html 代码,看看你是如何实现 datepicker 的吗?以及如何关闭日期选择器?当您选择第二个日期时,它会自动关闭?

标签: jquery datepicker date-range


【解决方案1】:

更新

唯一的方法(对我来说)是添加一个间谍来检查 DOM 中是否存在某个类 (datepick-popup)(模拟插件中不存在的打开事件):

    var lapse = setInterval( checkIfpickerIsOpened, 300); //you could adjust the time
    
    function checkIfpickerIsOpened(){
       if($(".datepick-popup").length > 0){
         $(".datepick-popup .datepick-selected:first, .datepick-popup .datepick-selected:last").addClass("selected");
         clearInterval(lapse);
       }
    }
   
   $('.date-picker-input').datepick({ 
        rangeSelect: true, 
        dateFormat: 'dd/mm/yyyy',
        changeMonth: false,
        prevText: '<',
        nextText: '>',
        showOtherMonths: true,
        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        onClose: Close,
        showTrigger: '#calImg'
  });

   function Close(){
     lapse = setInterval( checkIfpickerIsOpened, 100);      
  } 

要查看结果,您可以添加一个 css:

.selected {
  background-color:red !important;// *important* is needed to override default color
}

我发现了一个隐藏的偶数onShow,所以当我们有一些超时来等待日期选择器的不同项目出现时它可以正常工作。

   $('.date-picker-input').datepick({ 
        rangeSelect: true, 
        dateFormat: 'dd/mm/yyyy',
        changeMonth: false,
        prevText: '<',
        nextText: '>',
        showOtherMonths: true,
        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        onShow: function(){setTimeout(Open, 200);},
        showTrigger: '#calImg'
  });

 function Open(){
  if($(".datepick-popup").length > 0){
     $(".datepick-popup .datepick-selected:first, .datepick-popup .datepick-selected:last").addClass("selected");
  }    
} 

所以你有 2 个解决方案!!

【讨论】:

  • 谢谢先生的帮助。不幸的是,它仅在开始日期和结束日期在同一个月内时才有效。如果我需要滑到下个月以选择结束日期,则您的两个代码都有问题。例如,尝试选择 4 月 24 日作为开始日期,并选择 5 月 6 日作为结束日期,您会看到它在当月的最后一天刹车。
  • 这是另一个问题,我们达到了插件的限制,您没有谈到月份不同的开始日期和结束日期(按照您的示例)。有一个解决方案,但需要一些代码..我建议您在另一个问题上明确您的问题,以避免污染这个已经很复杂的问题..仅供参考,当您更改月份时,所有数据都会更新并且您没有看到先例DOM 中的一个月,因此您需要一些新代码
  • 所以它的有趣问题..!!.
  • 好的先生,我开了一张新票stackoverflow.com/questions/67208153/…
  • @Majurac 请不要忘记验证并投票以关闭问题的答案
【解决方案2】:

您正在尝试使用:first:last,而您可能应该使用:first-of-type:last-of-type。试试:

$('.date-picker-input .datepick-selected:first-of-type, .date-picker-input .datepick-selected:last-of-type').addClass('selected');

【讨论】:

  • 也试过了,但它仍然没有为第一个和最后一个元素生成额外的类,
  • 我还没有测试过你的 jQuery UI 代码——但值得注意的是,像 :first-of-type 这样的同级 CSS 选择器适用于你有相同类型同级的情况。 .datepick-selected 元素都是兄弟姐妹,还是他们有不同的父母等等?如果他们有不同的父母(因为不同的日历行等)尝试const elements = $('.date-picker-input .datepick-selected'); for (let i = 0; elements.length; i++) { const element = elements[i]; if (i == 0 || i == (elements.length - 1)) { $(element).addClass('selected'); } }
  • .datepick-selected 元素有不同的父元素(参见我最初帖子下的屏幕截图)。 Tnx,我会试试你的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多