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

Shiny中ToastUI Calendar指定日期背景色修改问题求助

问题根因

直接放在ui中的JS代码执行早于ToastUI Calendar组件的渲染流程,待修改的日期DOM节点尚未生成,因此样式修改无效;在浏览器控制台运行时组件已完成加载,故可正常生效。

修复后完整代码
library(shiny)
library(toastui)
library(htmlwidgets)

options(shiny.launch.browser = T)

ui <- fluidPage(
  calendarOutput("my_calendar")
)

server <- function(input, output, session) {
  
  output$my_calendar <- renderCalendar({
    calendar(
      defaultDate = Sys.Date(),
      useNavigation = TRUE
    ) %>% 
      htmlwidgets::onRender("
        function(el, x) {
          // 封装背景色修改逻辑
          function updateDateBg() {
            const targetIndexes = [1,3,5,6];
            targetIndexes.forEach(idx => {
              const dateEl = document.querySelectorAll('.tui-full-calendar-weekday-grid-line.tui-full-calendar-near-month-day').item(idx);
              if (dateEl) dateEl.style.backgroundColor = '#00ff004c';
            });
          }
          // 首次渲染完成后执行
          updateDateBg();
          // 监听日历切换视图、月份的事件,修改后自动重新应用样式
          el.addEventListener('tuiCalendarAfterRender', updateDateBg);
        }
      ")
  })
}

if (interactive())
  shinyApp(ui = ui, server = server)
效果说明

该写法借助htmlwidgets的onRender回调,保证JS代码仅在日历组件完全渲染完成后执行,同时监听日历更新事件,切换月份后样式也不会丢失,实现的效果如下:
预期效果

内容的提问来源于stack exchange,提问作者Leonardo Donato Nunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:39:01