我在 Shiny 中有一个 navbarPage,我在其中初始化了一个使用 css 隐藏的选项卡(我们称之为 tab1)。为此,我使用以下行:
tags$head(tags$style(HTML("#tabs li a[data-value = 'tab1'] {display: none;}"))),
这很完美。
现在,在服务器中,我想显示该选项卡以响应事件,但我不知道如何从 R 代码“更新/替换”该 css 属性 (display:none)。我看到可以使用 runjs() 来完成,但我并不是 js/css 方面的真正专家。
我如何修改服务器中该对象的 css 属性?
更新
我想我成功了。
我的做法是:一开始定义两个css样式。
display: none
用于初始 tab2 navbar tabsetpanel 和 display: inline-block !important
用于名为“showtab”的新类。然后我使用 shinyjs 向导航栏 tabsetpanel 的 tab2 添加一个类,它覆盖(!重要
)tab2 的原始 css 样式。
shinyjs 原始函数的问题是:
(1) 当使用 hide
/show
时,您可以在初始启动时看到您不希望它显示的 tab2。
(2) 当使用您的 css 样式 display: none
和 shinyjs::show
或 shinyjqui::jqui_show
时,样式参数更改为style = inline
弄乱了导航栏页面中单词“tab2”的位置。
css <- "
#navbar li a[data-value = tab2] {
display: none;
}
.showtab {
display: inline-block !important;
}
"
#
library(shiny)
library(shinyjs)
ui <- tagList(
useShinyjs(),
inlineCSS(css),
navbarPage(
"test navbarPage",
id = "navbar",
tabPanel(
title = "tab1",
actionButton("show", "Show tab2")
),
tabPanel(
title = "tab2"
)
)
)
server <- function(input, output, session) {
observeEvent(input$show, {
addClass(selector = "#navbar li a[data-value = tab2]",
class = 'showtab')
})
}
shinyApp(ui = ui, server = server)