使用shiny DT包中的选择扩展附带的全选按钮仅选择过滤的行

2024-01-24

我试图使用闪亮的 DT 包中的选择扩展附带的全选按钮来仅选择过滤的行,但它会选择所有行。 这是闪亮的样本app https://radhikesh.shinyapps.io/selectextension/

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

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 来解决这个问题,但我不擅长它。 任何人都可以提供帮助或提供任何建议。

Thanks


不知何故,我设法找到了我的问题的解决方案。将其发布在这里,这样可能会对其他人有所帮助。我从几个地方得到了帮助。数据表文档 https://datatables.net/reference/option/buttons.buttons.extend and 堆栈溢出 https://stackoverflow.com/a/40363328/6090977

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

这是更新后的闪亮app https://radhikesh.shinyapps.io/selectextension/

以下是更新后的代码:

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)

希望这对其他人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用shiny DT包中的选择扩展附带的全选按钮仅选择过滤的行 的相关文章

随机推荐