我正在尝试使用闪亮包中的help(removeUI)
函数,但是在删除特定元素时遇到了一些困难。下面是此问题的一个示例,与textInput(
中的示例略有不同。具体来说,包含actionButton(
的注释行被library(shiny)
ui <- fluidPage(
sidebarPanel(
actionButton("rmv", "Remove UI"),
actionButton("txt", "This is no longer useful")
#textInput("txt", "This is no longer useful")
)
)
# Server logic
server <- function(input, output, session) {
observeEvent(input$rmv, {
removeUI(
selector = "div:has(> #txt)"
)
})
}
# Complete app with UI and server components
shinyApp(ui, server)
代替。
textInput()
虽然可以删除actionButton()
的组件,但是该方法不适用于使用selector = "div:has(> #txt)"
删除类似的组件。我不确定为什么,因为在这种情况下jQuery选择器的逻辑似乎相同。
我还尝试将selector = "button:has(> #txt)"
更改为button
,以为jQuery搜索将适用于actionButton("txt", "This is no longer useful")
元素,但同样无济于事。
编辑:找到了解决方案。用div()
包装div<>
会将操作按钮放入{{1}}块中,因此搜索将起作用。
答案 0 :(得分:1)
首先,一些常规内容,页面中的每个元素必须具有唯一的id
,对于多个元素,您不能像对actionButton
和textInput
那样使用相同的名称。此规则适用于网络上的所有HTML页面。
关于这个问题,我写了一个小函数,可以让您收集与特定模式匹配的元素
library(shiny)
ui <- fluidPage(
sidebarPanel(
actionButton("rmv", "Remove UI"),
actionButton("txt", "This is no longer useful"),
textInput("txt2", "This is no longer useful")
)
)
# Server logic
server <- function(input, output, session) {
getInputs <- function(pattern){
reactives <- names(reactiveValuesToList(input))
reactives[grep(pattern,reactives)]
}
observeEvent(input$rmv, {
vals <- getInputs("txt")
vals <- paste0("#",vals)
removeUI(
selector = vals,
multiple = T
)
})
}
# Complete app with UI and server components
shinyApp(ui, server)