闪亮的 DT,select 过滤行的自定义按钮
Shiny DT, custom button to select filtered rows
我想在下面的最小可重现示例中包含自定义按钮作为 data.table
的扩展。这个例子基本上取自这个 .
因为我的应用程序中有几个 data.tables
,所以我尝试在按钮的 action
定义的 JS
代码中使用函数 var table = $(this.api().table().node()).DataTable();
,这是行不通的。如果我插入 var table = $('#DataTables_Table_0').DataTable();
它工作正常,但不再通用。
非常感谢任何帮助!
library(shiny)
library(DT)
ui <- fluidPage(
titlePanel("Select only filtered rows using selectall button"),
br(),
br(),
DT::dataTableOutput("tableTest")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$tableTest <- DT::renderDataTable({
datatable(mtcars,
escape = F,
rownames = F,
filter = 'top',
class = "compact hover row-border",
extensions = c('Scroller', 'Select', 'Buttons'),
options = list(
select = list(style = "multi", items = "row"),
columnDefs = list(list(className = 'dt-center', targets = "_all")),
language = list(info = 'Showing _START_ to _END_ of _TOTAL_ variables'),
deferRender = TRUE,
scrollY = 500,
scroller = TRUE,
dom = "Blfrtip",
buttons =
list(
list(extend='selectAll',
className='selectAll',
text="select all rows",
action = DT::JS(
"function () {
var table = $(this.api().table().node()).DataTable();
table.rows({ search: 'applied'}).deselect();
table.rows({ search: 'applied'}).select();
}")
),
list(extend='selectNone',
text="DeselectAll",
action = DT::JS(
"function () {
var table = $(this.api().table().node()).DataTable();
table.rows({ search: 'applied'}).select();
table.rows({ search: 'applied'}).deselect();
}")
))
),
selection = "none"
) }, server = F
)
}
# Run the application
shinyApp(ui = ui, server = server)
我没试过,但我想你可以这样做:
action = JS(
"function(e, table, node, config) {",
" table.rows({ search: 'applied'}).deselect();",
" table.rows({ search: 'applied'}).select();",
"}"
)
我想在下面的最小可重现示例中包含自定义按钮作为 data.table
的扩展。这个例子基本上取自这个
因为我的应用程序中有几个 data.tables
,所以我尝试在按钮的 action
定义的 JS
代码中使用函数 var table = $(this.api().table().node()).DataTable();
,这是行不通的。如果我插入 var table = $('#DataTables_Table_0').DataTable();
它工作正常,但不再通用。
非常感谢任何帮助!
library(shiny)
library(DT)
ui <- fluidPage(
titlePanel("Select only filtered rows using selectall button"),
br(),
br(),
DT::dataTableOutput("tableTest")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$tableTest <- DT::renderDataTable({
datatable(mtcars,
escape = F,
rownames = F,
filter = 'top',
class = "compact hover row-border",
extensions = c('Scroller', 'Select', 'Buttons'),
options = list(
select = list(style = "multi", items = "row"),
columnDefs = list(list(className = 'dt-center', targets = "_all")),
language = list(info = 'Showing _START_ to _END_ of _TOTAL_ variables'),
deferRender = TRUE,
scrollY = 500,
scroller = TRUE,
dom = "Blfrtip",
buttons =
list(
list(extend='selectAll',
className='selectAll',
text="select all rows",
action = DT::JS(
"function () {
var table = $(this.api().table().node()).DataTable();
table.rows({ search: 'applied'}).deselect();
table.rows({ search: 'applied'}).select();
}")
),
list(extend='selectNone',
text="DeselectAll",
action = DT::JS(
"function () {
var table = $(this.api().table().node()).DataTable();
table.rows({ search: 'applied'}).select();
table.rows({ search: 'applied'}).deselect();
}")
))
),
selection = "none"
) }, server = F
)
}
# Run the application
shinyApp(ui = ui, server = server)
我没试过,但我想你可以这样做:
action = JS(
"function(e, table, node, config) {",
" table.rows({ search: 'applied'}).deselect();",
" table.rows({ search: 'applied'}).select();",
"}"
)