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

fullcalendar v3.1(JS/C#)如何高亮gotoDate函数定位到的特定日期

FullCalendar v3.1 gotoDate后高亮指定日期修复方案

问题根因

  • fullCalendar('gotoDate') 属于异步渲染方法,调用后日历需要重新加载对应月份的DOM节点,同步执行DOM选择逻辑时,目标日期的DOM还未渲染完成,自然匹配不到元素
  • 日期格式不匹配:.fc-day的data-date属性值为YYYY-MM-DD格式,直接拼接moment对象会生成不符合要求的字符串,导致选择器失效
  • 未清理旧高亮样式,多次搜索会残留多个高亮日期块

稳定修复方案

在日历初始化时绑定视图渲染完成回调,跳转后自动执行高亮逻辑,避免异步渲染导致的DOM匹配问题:

// 全局存储待高亮的日期
let highlightDate = null;

$(document).ready(function () {
  // 初始化日历
  $("#calendar").fullCalendar({
    // 保留你原来的所有日历配置项,新增下面的viewRender配置
    viewRender: function() {
      // 视图渲染完成后,判断是否有需要高亮的日期
      if (highlightDate) {
        // 先清除所有旧高亮
        $('.fc-day').css('background-color', '');
        // 格式化日期为YYYY-MM-DD匹配data-date属性规则
        const formatDate = highlightDate.format('YYYY-MM-DD');
        $(`.fc-day[data-date="${formatDate}"]`).css('background-color', 'red');
        // 高亮完成后清空标记,避免切换视图时重复高亮
        highlightDate = null;
      }
    }
  });

  $("#btnsearch").click(function () {
    var res = $("#txtSearch").val();
    res = res.substring(0,19);
    // 解析日期后赋值给全局高亮标记
    highlightDate = moment(res, "DD/MM/YYYY HH:mm");
    // 跳转到指定日期,触发视图重新渲染
    $("#calendar").fullCalendar('gotoDate', highlightDate);
  })
})

临时快速验证方案

如果不想修改日历初始化配置,也可以给DOM操作加短延迟等待渲染完成:

$("#btnsearch").click(function () {
  var res = $("#txtSearch").val();
  res = res.substring(0,19);
  const date = moment(res, "DD/MM/YYYY HH:mm");
  $("#calendar").fullCalendar('gotoDate', date);
  // 加100ms延迟等待日历DOM渲染完成
  setTimeout(() => {
    $('.fc-day').css('background-color', '');
    const formatDate = date.format('YYYY-MM-DD');
    $(`.fc-day[data-date="${formatDate}"]`).css('background-color', 'red');
  }, 100)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:18:05