Node.js EJS环境下为日历指定日期添加粗体样式的问题求助
Node.js EJS环境下为日历指定日期添加粗体样式的问题求助
嗨,我来帮你排查这个问题!你遇到的情况主要有两个关键点:一是beforeShowDay的逻辑没针对指定日期做判断,二是不知道怎么在日历渲染完成后执行自定义操作。咱们一步步来解决:
1. 修正beforeShowDay的逻辑,只给10号和15号加样式类
你现在的代码是给所有日期都加上custom-day类,自然看不到预期效果。得先判断当前日期是不是10号或15号,再决定是否添加类:
dateTitle.datepicker({ beforeShowDay: function(date) { // 获取当前日期的“日”部分 const dayOfMonth = date.getDate(); // 只给10号和15号添加自定义类 if (dayOfMonth === 10 || dayOfMonth === 15) { return [true, "custom-day"]; // 第一个参数true表示允许选择该日期,第二个是要加的类名 } // 其他日期正常显示,不加类 return [true, ""]; } });
2. 确保CSS样式能覆盖默认日历样式
jQuery UI的日历自带默认样式,你需要给custom-day类加足够优先级的样式才能生效,比如:
.custom-day { font-weight: bold !important; /* 可选:再加个颜色让效果更明显 */ color: #dc3545 !important; }
加!important是为了覆盖UI库的默认样式优先级,保证你的粗体效果能显示出来。
3. 在日历显示后执行自定义函数
如果需要在日历渲染完成后做额外操作(比如手动修改DOM),可以用jQuery UI Datepicker的beforeShow事件——这个事件会在日历即将显示、DOM已经生成的时候触发,刚好适合你的需求:
dateTitle.datepicker({ beforeShowDay: function(date) { const dayOfMonth = date.getDate(); if (dayOfMonth === 10 || dayOfMonth === 15) { return [true, "custom-day"]; } return [true, ""]; }, beforeShow: function(input, inst) { // 日历DOM已经生成,这里可以执行你的自定义逻辑 // 比如获取日历容器,查找指定日期的元素 const calendarContainer = inst.dpDiv; const targetDays = calendarContainer.find(".custom-day"); // 举个例子:给这些日期加背景色 targetDays.css("background-color", "#f8f9fa"); // 如果需要等日历完全渲染完成,可以加个短暂延迟 setTimeout(() => { // 这里能确保日历已经完全显示在页面上 console.log("日历已完全渲染,可执行后续操作"); }, 10); } });
另外要注意:确保你的代码是在jQuery和jQuery UI脚本加载完成后执行的,不然会找不到datepicker方法哦!
备注:内容来源于stack exchange,提问作者nezek
相关产品推荐
相关产品推荐

