如何在JS Datepicker中高亮特定星期几(如周一、周二等)
解决Datepicker高亮特定星期几的问题
嘿,我明白你遇到的麻烦了——你想让Datepicker高亮特定的星期几(比如周日、周一、周二,对应getDay()返回的0、1、2),但现在代码把所有日期都高亮了对吧?问题出在两个地方:类型不匹配和**$.inArray的判断逻辑错误**,咱们来一步步修正:
问题分析
- 类型不匹配:你的
dates.data是字符串数组['0','1','2'],但date.getDay()返回的是数字类型(比如周日返回0,周一返回1)。$.inArray会严格匹配类型,所以数字0在字符串数组里找不到,会返回-1。 - 判断逻辑错误:
$.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
相关产品推荐
相关产品推荐

