在带有 R shiny 的 selectizeInput 中使用 html

use html in selectizeInput with R shiny

我想在 select(ize)Input 的选项中使用一些 html。有谁知道一个简单的解决方案如何告诉 shiny 将选项视为 HTML?

library(shiny)

ui <- fluidPage(
  selectInput("test html use", label = "option", choices = c("<div title = 'This is option A'>opt A</div>", "opt B"))
)

server <- function(input, output) {
}

shinyApp(ui = ui, server = server)

为了将 selectizeInput 的选项视为 HTML,render 选项是可行的方法。以下代码将呈现普通输出:

library(shiny)

shinyApp(
  ui = fluidPage(
    br(),
    selectizeInput(
      "slctz", "Select something:",
      choices = list("option1" = "value1", "option2" = "value2"), 
      options = list( 
        render = I("{
        item: function(item, escape) { 
          return '<span>' + item.label + '</span>'; 
        },
        option: function(item, escape) { 
          return '<span>' + item.label + '</span>'; 
        }
      }")
      )
    )
  ),
  server = function(input, output) {}
)

option 字段用于选项列表,而 item 字段用于所选选项。

因此,如果您想要设置选项和所选选项的样式,您可以通过向 span 元素添加 class 属性并定义 CSS 类 在 UI:

ui = fluidPage(
  tags$head(
    tags$style(
      HTML(
        "
        .myoption {......}
        .myitem {......}
        "
      )
    )
  ),
  br(),
  selectizeInput(
    "slctz", "Select something:",
    choices = list("option1" = "value1", "option2" = "value2"), 
    options = list( 
      render = I("{
        item: function(item, escape) { 
          return '<span class=\"myitem\">' + item.label + '</span>'; 
        },
        option: function(item, escape) { 
          return '<span class=\"myoption\">' + item.label + '</span>'; 
        }
      }")
    )
  )
)