使用Day.js与jQuery实现时间对比及DOM类名动态添加问题咨询
问题修正方案
先梳理你代码里的几个核心问题,再给你调整后的代码:
- 选择器写法错误:原代码里的
div.col-2 col-md-1 hour text-center py-3是错误的类选择器写法,类名前必须加.,多类选择器要连写,否则会被当成层级选择器查找后代元素。 - 时间对比逻辑无效:直接用字符串和
dayjs().isAfter对比不生效,必须把获取到的时间字符串转换成Day.js实例才能进行时间比较。 - 变量冗余:函数参数
projectTime被重复声明,完全没必要保留。 - 元素选择局限:如果是多个时间块场景,
#hour(ID选择器)只能选中第一个元素,建议用类选择器匹配目标行。
调整后的代码:
function getScheduleTime() { // 获取第二个目标div的时间文本(jQuery索引从0开始,eq(1)对应第二个元素) var projectTimeStr = $("div.col-2.col-md-1.hour.text-center.py-3").eq(1).text().trim(); // 将时间字符串转为Day.js实例,格式要和页面显示的时间完全匹配 var projectTime = dayjs(projectTimeStr, "h:mm A"); var now = dayjs(); // 定位要添加类的第一行元素(替换成你实际的目标元素选择器) var targetRow = $(".time-block").eq(0); // 先清空旧的状态类,避免重复叠加 targetRow.removeClass("past present future"); if (now.isSame(projectTime, "minute")) { targetRow.addClass("present"); } else if (now.isAfter(projectTime)) { targetRow.addClass("future"); } else { targetRow.addClass("past"); } }
额外说明:
- 如果页面上的时间格式不是
h:mm A(比如是HH:mm),要同步修改dayjs()转换时的格式参数。 - 要是需要给所有时间块批量做判断,去掉
eq(0),改用each()循环遍历每个时间块,对应获取各自的时间进行对比。
内容的提问来源于stack exchange,提问作者SD2512
相关产品推荐
相关产品推荐

