DT 默认折叠所有行组
DT collapse all row groups by default
我试图让数据中的所有行组table默认折叠,
我当前的实现:
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)
结果:
我想要的输出:
所有行组都应在初始时折叠(在第一次呈现 table 时),我还找不到任何解决方案
更新(2021 年 3 月 24 日):
感谢@thothal,现在 table 在初始化时折叠,但如果不同选项卡有多个 DT,第一个 table 会在来回导航时意外展开
重现代码:
library(shiny)
library(DT)
ui <- fluidPage(# Application title
titlePanel("Collapse/Expand table"),
mainPanel(
tabsetPanel(
tabPanel("table1", dataTableOutput("my_table")),
tabPanel("table2", dataTableOutput("my_table2"))
)
))
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'))"
)
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 = callback_js,
selection = 'none'
)
})
output$my_table2 <- DT::renderDataTable({
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)
调整您的 callback
如下:
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'))"
)
一旦 table 设置完成,这将触发所有点击事件。
我想出了多个DT的解决方案,我们需要指定哪些table触发'click'事件。由于 DT 是惰性渲染,当其他 DT 渲染时,它会删除隐藏的 class for previous table
代码:
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)
我试图让数据中的所有行组table默认折叠,
我当前的实现:
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)
结果:
我想要的输出:
所有行组都应在初始时折叠(在第一次呈现 table 时),我还找不到任何解决方案
更新(2021 年 3 月 24 日):
感谢@thothal,现在 table 在初始化时折叠,但如果不同选项卡有多个 DT,第一个 table 会在来回导航时意外展开
重现代码:
library(shiny)
library(DT)
ui <- fluidPage(# Application title
titlePanel("Collapse/Expand table"),
mainPanel(
tabsetPanel(
tabPanel("table1", dataTableOutput("my_table")),
tabPanel("table2", dataTableOutput("my_table2"))
)
))
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'))"
)
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 = callback_js,
selection = 'none'
)
})
output$my_table2 <- DT::renderDataTable({
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)
调整您的 callback
如下:
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'))"
)
一旦 table 设置完成,这将触发所有点击事件。
我想出了多个DT的解决方案,我们需要指定哪些table触发'click'事件。由于 DT 是惰性渲染,当其他 DT 渲染时,它会删除隐藏的 class for previous table
代码:
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)