如何在R Shiny Popify(ShinyBS)工具提示中呈现HTML内容?

rsl1atfo  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(143)

我在R Shiny中构建了一个数据表,它的一部分将包括每个单元格特有的工具提示。我已经完成了这一点,但是,我似乎无法将HTML内容插入到工具提示本身。在下面的示例中,我将HTML内容插入到数据表的一个单元格中,然后将相同的内容插入到工具提示中,但HTML只呈现在数据表中,而不是工具提示中。
我已经尝试了一些想法,但没有找到任何工作。我可以让HTML出现(作为文本),但是很明显,它被转义了,只是文本。我可以使用标签$b在工具提示中加粗文本(),但是,我希望有一个与下面的示例更相似的解决方案,因为除了文本之外,我还想向工具提示中添加更复杂的HTML内容。
有什么主意吗?非常感谢!

library(shiny)
library(shinyBS)
library(DT)

ui <- fluidPage(
  bsTooltip('tbutton',''),
  mainPanel(dataTableOutput('df'))
)

server <- function(input, output) {
  
  df <- data.frame(A = c(1:5), B = c(LETTERS[1:5]))
  
  output$df <- renderDataTable({
    
    cell <- paste0('<svg width="30" height="30">',
                   '<text x="1%" y="75%" font-weight="bold" font-size="16" >B</text>',
                   '</svg>')
    
    df[2,2] <- as.character(popify(tags$div(HTML(cell)),
                                   title = 'Tooltip:',
                                   placement = 'left',
                                   content = paste0(tags$div(HTML(cell))),
                                   trigger = c('hover', 'click')))
    
    datatable(df, escape=FALSE)
  })
}

shinyApp(ui = ui, server = server)
bqucvtff

bqucvtff1#

要将弹出窗口附加到单元格,如果此单元格具有id,则可以使用bsPopover。要将id设置到单元格,可以使用datatables选项createdCell
然后HTML代码可以在弹出窗口内容中工作,但不能在SVG中工作(或者至少我没有设法使它工作)。

library(shiny)
library(shinyBS)
library(DT)

df <- data.frame(A = 1:5, B = LETTERS[1:5])

css <- "
.red {color: red;}
"

ui <- fluidPage(
  tags$head(tags$style(HTML(css))),
  mainPanel(
    DTOutput('df'),
    bsPopover(
      id = "id2",
      title = "test",
      content = '<p class="red">TEST</p>'
    )
  )
)

server <- function(input, output) {
  
  output$df <- renderDT({
    datatable(
      df,
      options = list(
        columnDefs = list(
          list(
            targets = 2,
            createdCell = JS(
              "function (td, cellData, rowData, row, col) {",
              "  $(td).attr('id', 'id' + (row+1));",
              "}"
            )
          )
        )
      )
    )
    
  })
}

shinyApp(ui = ui, server = server)

相关问题