如何在R Shiny的selectInput中显示HTML格式化学公式?
在R Shiny中实现selectInput显示HTML内容的方案
原生的selectInput无法直接渲染HTML内容,因为浏览器默认不会解析<option>标签内的HTML代码。不过可以通过以下两种高效方案实现你的需求:
方案一:使用shinyWidgets的pickerInput
shinyWidgets包的pickerInput组件支持渲染HTML选项,只需设置escape = FALSE即可禁用HTML转义,直接解析标签内容。
示例代码
library(shiny) library(shinyWidgets) ui <- fluidPage( pickerInput( inputId = "id", label = "Choice", choices = c('H<sub>2</sub>O', 'CO<sub>2</sub>', 'NH<sub>4</sub><sup>+</sup>'), options = list(escape = FALSE) # 关键设置:允许HTML渲染 ) ) server <- function(input, output, session) {} shinyApp(ui, server)
方案二:使用selectizeInput结合自定义渲染函数
selectizeInput允许通过JavaScript自定义选项的渲染逻辑,直接将HTML文本作为选项内容渲染:
示例代码
library(shiny) ui <- fluidPage( selectizeInput( inputId = "id", label = "Choice", choices = c('H<sub>2</sub>O', 'CO<sub>2</sub>', 'NH<sub>4</sub><sup>+</sup>'), options = list( render = I(" { item: function(item, escape) { return item.text; }, option: function(item, escape) { return item.text; } } ") ) ) ) server <- function(input, output, session) {} shinyApp(ui, server)
注意事项
- 修正了你示例中的HTML语法错误:
NH<sub>4 </sub><sup>+<\sup>应改为NH<sub>4</sub><sup>+</sup>(闭合标签格式错误)。 - 这两种方案都无需依赖MathJax或KaTeX,直接通过HTML原生渲染,性能更符合你的需求。
内容的提问来源于stack exchange,提问作者Lemniscomys
相关产品推荐
相关产品推荐

