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

JS新手求助:实现每周五自动切换任务负责人并修改HTML元素类

实现每周五自动切换任务负责人的调度功能

先给你捋清楚原代码里的几个基础错误,再补上核心逻辑:

原代码的问题

  1. Date.getDay() 写错了,getDay()是Date实例的方法,应该用new Date().getDay()或者你已经创建的date变量调用:date.getDay()
  2. if条件里用了=赋值符号,判断相等应该用===(严格相等)或者==
  3. 10秒一次的定时器太浪费资源,毕竟一周才切换一次,改成每天检查一次更合理
  4. 你只在初始化时获取了一次星期几,定时器里不会更新日期,永远是页面加载那天的星期数,必须每次检查时重新获取日期

完整实现代码

下面是带持久化(页面刷新不重置状态)的完整逻辑,假设你用active类标记当前负责人:

// 获取三个任务元素
const kestrals = document.getElementById("k");
const eagles = document.getElementById("e");
const merlins = document.getElementById("m");
// 把元素放进数组方便轮询
const dutyTeams = [kestrals, eagles, merlins];

// 用本地存储保存当前负责人的索引,页面刷新也不会丢
let currentIndex = parseInt(localStorage.getItem("currentDutyIndex")) || 0;

// 页面加载时先设置好初始状态
setActiveDuty();

// 每天检查一次(86400000毫秒 = 24小时)
const checkInterval = setInterval(checkForFriday, 86400000);

function checkForFriday() {
  const today = new Date();
  const dayOfWeek = today.getDay(); // 5代表周五

  // 如果今天是周五,切换负责人
  if (dayOfWeek === 5) {
    // 切换到下一个,循环轮询(到最后一个回到第一个)
    currentIndex = (currentIndex + 1) % dutyTeams.length;
    // 把新的索引存到本地存储
    localStorage.setItem("currentDutyIndex", currentIndex);
    // 更新页面显示
    setActiveDuty();
  }
}

function setActiveDuty() {
  // 先移除所有元素的active类
  dutyTeams.forEach(team => team.classList.remove("active"));
  // 给当前负责人的元素加上active类
  dutyTeams[currentIndex].classList.add("active");
}

// 页面加载完成后立即检查一次,避免要等24小时才触发
checkForFriday();

关键逻辑说明

  • 持久化状态:用localStorage保存当前负责人的索引,就算用户关闭页面再打开,也能接着上次的状态继续轮询
  • 类操作分离:把添加/移除类的逻辑单独放在setActiveDuty函数里,代码更清晰,也方便后续修改样式规则
  • 合理的检查频率:每天检查一次是否是周五,既保证不会错过切换时间,又不会浪费浏览器资源
  • 初始检查:页面加载时立即执行一次检查,如果当天就是周五,会直接切换负责人,不用等24小时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:14:56