我的DT输出表在渲染时似乎获得了一个随机表ID。当我检查网页时我可以看到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”,然后一键选择所有过滤的行:
有没有另一种方法可以实现这一点,不需要知道ID,或者有没有办法指定ID?
实际上,您不需要
id
,而是需要 任何形式的 CSS 选择器,它可以明确地寻址您的表格。因此,您可以使用自己选择的 id
作为输出元素,并从那里选择内部表格。因此,用以下选择器替换你的 JS 部分,一切都会顺利进行:
let table = $('#dt_output table').DataTable()