【问题标题】:Shiny DT, custom button to select filtered rows闪亮的 DT,用于选择过滤行的自定义按钮
【发布时间】:2021-06-10 07:40:47
【问题描述】:

我想在下面的最小可重现示例中包含自定义按钮作为data.table 的扩展。这个例子基本上取自这个question

由于我的应用程序中有多个data.tables,因此我尝试使用函数var table = $(this.api().table().node()).DataTable(); 将按钮的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)


【问题讨论】:

    标签: javascript r shiny dt


    【解决方案1】:

    我没试过,但我认为你可以做到:

    action = JS(
      "function(e, table, node, config) {",
      "  table.rows({ search: 'applied'}).deselect();",
      "  table.rows({ search: 'applied'}).select();",
      "}"
    )
    

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 2019-02-10
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2015-09-28
      • 2017-10-03
      • 2020-10-22
      相关资源
      最近更新 更多