You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Shiny的DT表格页脚中正确渲染上标标签?

解决Shiny DT页脚HTML标签被转义的问题

问题核心是htmltools::withTags会自动转义字符串中的HTML特殊字符,直接写<sup>1</sup>这类标签会被转换成&lt;sup&gt;1&lt;/sup&gt;实体,导致无法渲染成上标。以下两种方法可以解决:

方法一:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:07:33