如何设置/获取 Shiny DT 表的 HTML 表 ID?

问题描述 投票:0回答:1

我的DT输出表在渲染时似乎获得了一个随机表ID。当我检查网页时我可以看到ID:

DT table ID

在本例中,id 是

DataTables_Table_0
。有没有办法明确设置ID?

我在表格中添加了几个按钮,用于在过滤表格后选择所有可见行,并且该操作需要在

renderDT()
函数中使用表格 ID,如下所示:

library(shiny)
library(DT)

ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(),
        mainPanel(
            DTOutput('dt_output')
        )
    )
)
server <- function(input, output, session) {
    
    output$dt_output <- renderDT({
        datatable(mtcars,
                  extensions = c('Select', 'Buttons'),
                  selection = "none",
                  options = list(
                      select = list(style = "multi", items = "row"),
                      dom = "Blfrtip",
                      deferRender = TRUE,
                      buttons = list(
                          list(extend = 'selectAll',
                               text   = "Select All",
                               action = DT::JS(
                                   "function () {
                                        var table = $('#DataTables_Table_0').DataTable();
                                        table.rows({ search: 'applied'}).deselect();
                                        table.rows({ search: 'applied'}).select();}"
                               )),
                          list(extend = 'selectNone',
                               text = "Clear All",
                               action = DT::JS(
                                   "function () {
                                        var table = $('#DataTables_Table_0').DataTable();
                                        table.rows({ search: 'applied'}).select();
                                        table.rows({ search: 'applied'}).deselect();}"
                               ))
                      )
                  )
        )
    }, server = FALSE)
}
shinyApp(ui = ui, server = server)

由于 ID 是随机的,并且在渲染表格之前我不知道它,因此如果我尝试在同一应用程序中的多个表格上执行此操作,则会出现问题。也许还有另一种方法可以实现我想要的行为?例如,我想搜索“merc”,然后一键选择所有过滤的行:

enter image description here

有没有另一种方法可以实现这一点,不需要知道ID,或者有没有办法指定ID?

r shiny datatables dt
1个回答
0
投票

实际上,您不需要

id
,而是需要 任何形式的 CSS 选择器,它可以明确地寻址您的表格。因此,您可以使用自己选择的
id
作为输出元素,并从那里选择内部表格。因此,用以下选择器替换你的 JS 部分,一切都会顺利进行:

let table = $('#dt_output table').DataTable()
© www.soinside.com 2019 - 2024. All rights reserved.