如何在R Shiny的DT表格页脚中正确渲染上标标签?
解决Shiny DT页脚HTML标签被转义的问题
问题核心是htmltools::withTags会自动转义字符串中的HTML特殊字符,直接写<sup>1</sup>这类标签会被转换成<sup>1</sup>实体,导致无法渲染成上标。以下两种方法可以解决:
方法一:用HTML()标记原始HTML内容
将带标签的字符串用htmltools::HTML()包裹,明确告诉htmltools这是不需要转义的原始HTML:
sketch <- htmltools::withTags(table( tableFooter(list( htmltools::HTML("Footer<sup>1</sup>"), htmltools::HTML("Footer<sup>2</sup>") )) ))
方法二:用标签函数构建DOM元素
用htmltools的标签函数(比如tags$sup)直接构建页脚内容,这种方式贴合withTags的设计逻辑,天然不会出现转义问题:
sketch <- htmltools::withTags(table( tableFooter(list( tagList("Footer", tags$sup("1")), tagList("Footer", tags$sup("2")) )) ))
完整可运行代码
这里给出方法一的完整示例:
library(shiny) library(DT) ui <- fluidPage(dataTableOutput("table")) server <- function(input, output) { output$table <- renderDataTable({ sketch <- htmltools::withTags(table( tableFooter(list( htmltools::HTML("Footer<sup>1</sup>"), htmltools::HTML("Footer<sup>2</sup>") )) )) data <- datatable( data.frame(Col1 = c(1, 2), row.names = c("A<sub>1</sub>", "A<sub>2</sub>")), rownames = TRUE, container = sketch, escape = FALSE ) }) } shinyApp(ui = ui, server = server)
注意:你设置的escape=FALSE仅对DT表格的主体内容生效,页脚属于自定义container的一部分,转义规则由htmltools控制,因此需要在构建container时处理HTML标签的转义问题。
内容的提问来源于stack exchange,提问作者bathyscapher
相关产品推荐
相关产品推荐

