R 默认情况下,DT折叠所有行组

R 默认情况下,DT折叠所有行组,r,shiny,datatables,dt,R,Shiny,Datatables,Dt,我正在尝试使datatable中的所有行组默认折叠 我目前的执行情况: library(shiny) library(DT) ui <- fluidPage(# Application title titlePanel("Collapse/Expand table"), mainPanel(DTOutput("my_table"))) callback_js <- JS( "table.on('click', 'tr.d

我正在尝试使datatable中的所有行组默认折叠

我目前的执行情况:

library(shiny)
library(DT)
ui <- fluidPage(# Application title
  titlePanel("Collapse/Expand table"),
  mainPanel(DTOutput("my_table")))

callback_js <- JS(
  "table.on('click', 'tr.dtrg-group', function () {",
  "  var rowsCollapse = $(this).nextUntil('.dtrg-group');",
  "  $(rowsCollapse).toggleClass('hidden');",
  "});"
)

server <- function(input, output) {
  output$my_table <- DT::renderDT({
    datatable(
      mtcars[1:15, 1:5],
      extensions = 'RowGroup',
      options = list(rowGroup = list(dataSrc = 3), pageLength = 20),
      callback = callback_js,
      selection = 'none'
    )
  })
}

# Run the application
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(DT)

ui调整您的
回调
,如下所示:

callback_js <- JS(
   "table.on('click', 'tr.dtrg-group', function () {",
   "  var rowsCollapse = $(this).nextUntil('.dtrg-group');",
   "  $(rowsCollapse).toggleClass('hidden');",
   "});",
   "table.on('init', () => $('.dtrg-group').trigger('click'))"
)


callback_js我找到了多个DTs的解决方案,我们需要指定触发“click”事件的表。由于DT是惰性呈现,所以当其他DT呈现时,它会移除上一个表的隐藏类

代码:

库(闪亮)
图书馆(DT)

ui在最后说:“没有扩展/折叠组的选项”@PatrickBormann是的,但我希望一些JS专家能在这里教我谢谢你的回答,但是它只适用于一个DTs,对于多个DTs,其他DTs仍在无意中扩展,我更新了post,这是因为第一个表的行的click事件被触发了两次。您有两个选项:要么调整目标,使其仅针对相关表的行,要么直接运行折叠代码,即不使用触发器(执行切换),要么查找在所有表完全加载时触发的事件。
callback_js <- JS(
   "table.on('click', 'tr.dtrg-group', function () {",
   "  var rowsCollapse = $(this).nextUntil('.dtrg-group');",
   "  $(rowsCollapse).toggleClass('hidden');",
   "});",
   "table.on('init', () => $('.dtrg-group').trigger('click'))"
)

library(shiny)
library(DT)
ui <- fluidPage(# Application title
  titlePanel("Collapse/Expand table"),
  mainPanel(
    tabsetPanel(
      tabPanel("table1", dataTableOutput("my_table")),
      tabPanel("table2", dataTableOutput("my_table2"))
    )
  ))

server <- function(input, output) {
  output$my_table <- DT::renderDataTable({
    datatable(
      mtcars[1:15, 1:5],
      extensions = 'RowGroup',
      options = list(rowGroup = list(dataSrc = 3), pageLength = 20),
      callback = JS(
        "table.on('click', 'tr.dtrg-group', function () {",
        "  var rowsCollapse = $(this).nextUntil('.dtrg-group');",
        "  $(rowsCollapse).toggleClass('hidden');",
        "});",
        "table.one('init', () => $('#my_table .dtrg-group').trigger('click'))"
      ),
      selection = 'none'
    )
  })
  
  output$my_table2 <- DT::renderDataTable({
    datatable(
      mtcars[1:15, 1:5],
      extensions = 'RowGroup',
      options = list(rowGroup = list(dataSrc = 3), pageLength = 20),
      callback = JS(
        "table.on('click', 'tr.dtrg-group', function () {",
        "  var rowsCollapse = $(this).nextUntil('.dtrg-group');",
        "  $(rowsCollapse).toggleClass('hidden');",
        "});",
        "table.one('init', () => $('#my_table2 .dtrg-group').trigger('click'))"
      ),
      selection = 'none'
    )
  })
}

# Run the application
shinyApp(ui = ui, server = server)