You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS Datepicker中高亮特定星期几(如周一、周二等)

解决Datepicker高亮特定星期几的问题

嘿,我明白你遇到的麻烦了——你想让Datepicker高亮特定的星期几(比如周日、周一、周二,对应getDay()返回的0、1、2),但现在代码把所有日期都高亮了对吧?问题出在两个地方:类型不匹配和**$.inArray的判断逻辑错误**,咱们来一步步修正:

问题分析

  1. 类型不匹配:你的dates.data是字符串数组['0','1','2'],但date.getDay()返回的是数字类型(比如周日返回0,周一返回1)。$.inArray会严格匹配类型,所以数字0在字符串数组里找不到,会返回-1。
  2. 判断逻辑错误:$.inArray的返回值是元素的索引(找到时返回>=0的数,没找到返回-1)。你现在直接用if($.inArray(...)),在JS里-1会被当成true,所以所有日期都会进入高亮分支,这就是为什么所有日期都被标亮了。

修正后的代码

// 改成数字数组,和getDay()返回值类型一致
dates.data = [0, 1, 2]; 

beforeShowDay: function (date) {
  // 检查当前日期的星期几是否在目标数组中(返回值不等于-1表示找到)
  if ($.inArray(date.getDay(), dates.data) !== -1) {
    // 符合条件的星期几,返回高亮配置
    return [true, 'ui-state-error', 'tooltip text'];
  } else {
    // 默认情况,不高亮
    return [true, '', ''];
  }
}

额外说明

如果因为某些原因你必须保留dates.data为字符串数组,那可以把date.getDay()转成字符串再匹配:

dates.data = ['0','1','2'];

beforeShowDay: function (date) {
  const dayStr = date.getDay().toString();
  if ($.inArray(dayStr, dates.data) !== -1) {
    return [true, 'ui-state-error', 'tooltip text'];
  } else {
    return [true, '', ''];
  }
}

这样就能精准高亮你指定的星期几啦!

内容的提问来源于stack exchange,提问作者Abhijit Sood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:24:03