jQuery UI Datepicker 被编码为始终使用类ui-state-highlight 突出显示用户的本地日期。没有内置选项可以更改此设置。
在其他相关问题的答案中类似地描述的一种方法是覆盖该类的 CSS 以匹配您的主题的 ui-state-default,例如:
.ui-state-highlight {
border: 1px solid #d3d3d3;
background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
color: #555555;
}
但是,如果您使用动态主题,或者如果您的意图是突出显示不同的一天(例如,让“今天”基于服务器的时钟而不是客户端的时钟),这并不是很有帮助。
另一种方法是覆盖负责突出显示当前日期的日期选择器原型。
假设您使用的是 UI javascript 的最小化版本,以下 sn-ps 可以解决这些问题。
如果您的目标是完全避免突出显示当天:
// copy existing _generateHTML method
var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML;
// remove the string "ui-state-highlight"
_generateHtml.toString().replace(' ui-state-highlight', '');
// and replace the prototype method
eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML);
这会将相关代码(为了便于阅读而最小化)更改为:
[...](printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + [...]
到
[...](printDate.getTime() == today.getTime() ? '' : '') + [...]
如果您的目标是更改 datepicker 对“今天”的定义:
var useMyDateNotYours = '07/28/2014';
// copy existing _generateHTML method
var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML;
// set "today" to your own Date()-compatible date
_generateHTML.toString().replace('new Date,', 'new Date(useMyDateNotYours),');
// and replace the prototype method
eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML);
这会将相关代码(为了便于阅读而最小化)更改为:
[...]var today = new Date();[...]
到
[...]var today = new Date(useMyDateNotYours);[...]
// Note that in the minimized version, the line above take the form `L=new Date,`
// (part of a list of variable declarations, and Date is instantiated without parenthesis)
除了useMyDateNotYours,你当然也可以注入一个字符串、函数或任何适合你需要的东西。