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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:17:25