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

如何在日期过后为指定div添加类(JavaScript实现)

解决方案

你的思路完全可行

通过解析div的id获取日期数字,再和当前日期对比,给已过日期的div添加样式类的逻辑是完全通顺的,具体实现代码可以参考:

// 获取当前日期的天数
const currentDay = new Date().getDate();

// 遍历1到31天对应的div
for (let i = 1; i <= 31; i++) {
  const dayDiv = document.getElementById(`day-${i}`);
  // 确保div存在且日期早于当前日期时添加类
  if (dayDiv && i < currentDay) {
    dayDiv.classList.add('pastdate');
  }
}

更简便的优化方法

如果想让代码更简洁易维护,可以试试以下两种调整:

方法1:用data属性替代id解析

给每个div添加data-day属性直接存储日期数字,省去解析id的步骤:

<div data-day="1" class="something">content</div>
<div data-day="2" class="something">content</div>
<!-- 其余日期div同理 -->

对应的JS代码:

const currentDay = new Date().getDate();
// 批量选择所有带data-day属性的div并处理
document.querySelectorAll('[data-day]').forEach(div => {
  const day = parseInt(div.dataset.day, 10);
  if (day < currentDay) {
    div.classList.add('pastdate');
  }
});

方法2:直接批量选择id前缀匹配的元素

不用循环数字,直接选择所有id以day-开头的元素,再解析日期:

const currentDay = new Date().getDate();
document.querySelectorAll('[id^="day-"]').forEach(div => {
  // 从id中提取日期数字
  const day = parseInt(div.id.split('-')[1], 10);
  if (day < currentDay) {
    div.classList.add('pastdate');
  }
});

额外提示

如果需要适配不同月份的实际天数(比如2月最多29天),可以先获取当前月份的总天数,避免处理不存在的日期div:

const today = new Date();
const currentDay = today.getDate();
// 获取当前月份的最后一天,得到当月总天数
const totalDays = new Date(today.getFullYear(), today.getMonth() + 1, 0).getDate();

// 只遍历到当月实际天数
for (let i = 1; i <= totalDays; i++) {
  const dayDiv = document.getElementById(`day-${i}`);
  if (dayDiv && i < currentDay) {
    dayDiv.classList.add('pastdate');
  }
}

内容的提问来源于stack exchange,提问作者user3369743

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:45:41