【问题标题】:Select only filtered rows using select all button that comes with select extension in shiny's DT package使用闪亮的 DT 包中的选择扩展附带的全选按钮仅选择过滤的行
【发布时间】:2020-09-05 21:48:35
【问题描述】:

我正在尝试使用闪亮的 DT 包中的选择扩展名附带的全选按钮仅选择过滤的行,但它选择了所有行。 这是闪亮的样本app

以下是该应用的可重现代码:

library(DT)
data(mpg)
# Define UI for application 
ui <- fluidPage(

    # Application title
    titlePanel("Select only filtered rows using selectall button"),

    br(),
    br(),

    DT::dataTableOutput("table")


)

# Define server logic 
server <- function(input, output) {

    output$table <- DT::renderDataTable({
        datatable(mpg, escape=F,
                  rownames=F,
                  filter = 'top',
                  #  colnames = c("Data Type","Variable","Description", "Filename"),
                  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 = c('selectAll', 'selectNone')
                  ),
                  selection="none"
        ) }, server = F
    )
}

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

我想我可能需要添加一些自定义 javascript 来解决这个问题,但我不擅长。 任何人都可以帮助或提供任何建议。

谢谢

【问题讨论】:

    标签: javascript r shiny dt


    【解决方案1】:

    不知何故,我设法找出了我的问题的解决方案。把它贴在这里,所以它可能会帮助其他人。我从几个地方得到了帮助。 Datatable documentstackoverflow

    使用这些帮助,我扩展了我的全选按钮功能,并将它扩展为取消全选按钮(取消选择任何过滤的行)。

    这是更新后的闪亮app

    以下是更新后的代码:

    library(shiny)
    library(DT)
    data(mpg)
    # Define UI for application that draws a histogram
    ui <- fluidPage(
    
        # Application title
        titlePanel("Select only filtered rows using selectall button"),
        
        br(),
        br(),
        
        DT::dataTableOutput("table")
        
            
        
    )
    
    # Define server logic required to draw a histogram
    server <- function(input, output) {
    
        output$table <- DT::renderDataTable({
            datatable(mpg, escape=F,
                      rownames=F,
                      filter = 'top',
                      #  colnames = c("Data Type","Variable","Description", "Filename"),
                      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 = $('.dataTable').DataTable();
                                    table.rows({ search: 'applied'}).deselect();
                                    table.rows({ search: 'applied'}).select();
                    }")
                                    ), list(extend='selectNone',
                                            text="DeselectAll",
                                            action=DT::JS("function () {
                                    var table = $('.dataTable').DataTable();
                                    table.rows({ search: 'applied'}).select();
                                    table.rows({ search: 'applied'}).deselect();
                    }")
                                    ))
                          
                      ),
                      selection="none"
            ) }, server = F
        )
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    
    

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2020-06-09
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多