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

如何在R Shiny App的Server端更新fullPage.js菜单标签文本

解决fullPage Shiny应用中动态更新菜单标签的问题

你的核心问题是定位目标元素的方式错误:test_page是<li>的data-menuanchor属性值,而非元素ID,所以document.getElementById("test_page")找不到对应元素。下面是修正后的实现方案:

关键修正点

  • 使用CSS属性选择器定位目标<a>标签:li[data-menuanchor="test_page"] a,精准匹配菜单中对应锚点的链接
  • 用textContent替换innerHTML,避免潜在的HTML注入风险,同时更适合纯文本更新

完整可运行代码

library(fullPage)
library(shiny)
library(shinyjs)
library(shinyWidgets)

shinyApp(
  ui = pagePiling(
    shinyjs::useShinyjs(), 
    center = TRUE,
    sections.color = c("#CFE2F3"),
    menu = c("temp_title" = "test_page"),
    pageSection(
      menu="test_page",
      pickerInput("title",  multiple = FALSE, selected=NULL,
                  choices = c("Title 1", "Title 2", "Title with \"quotes\""))
    )
  ),
  server = function(input, output) {
    observeEvent(input$title, {
      # 定位目标链接并更新文本
      runjs(paste0(
        'const menuLink = document.querySelector(\'li[data-menuanchor="test_page"] a\');',
        'if(menuLink) menuLink.textContent = "', input$title, '";'
      ))
    }) 
  }
)

额外说明

  • 加入了if(menuLink)判断,避免元素未加载时出现JS报错
  • 示例中包含带引号的选项,textContent会自动处理这类特殊字符,无需额外转义
  • 如果需要支持多个菜单标签更新,只需要修改data-menuanchor的属性值即可对应不同的菜单项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:05:44