【问题标题】:Remove 'search' option but leave 'search columns' option删除“搜索”选项,但保留“搜索列”选项
【发布时间】:2016-06-08 01:21:54
【问题描述】:

我想从我的应用程序中删除“全局搜索”选项,但保留“列搜索”选项。有任何想法吗?我尝试了不同的参数,例如searching=FALSE, filtering='none'... 这些都不能正常工作。

我的代码:

server.R:

library("shiny")
library("DT")

data(iris)

shinyServer(function(input, output) {

    output$tabelka <- DT::renderDataTable({

        datatable(iris, filter="top", selection="multiple", escape=FALSE)

    })

})

ui.R

library("shiny")
library("DT")

shinyUI(fluidPage(

    DT::dataTableOutput("tabelka")

))

以及有助于理解我的问题的图片:

【问题讨论】:

  • 看看here,第 2.5 节。
  • @danas.zuokas,我已阅读本手册,但对我没有帮助。你能给我更具体的线索吗?
  • 好吧,我自己也没有答案,我认为它会引导你走向正确的方向。我的理解是,您可以根据需要使用自定义容器构建表格。我建议复制该示例并根据您的需要进行调整。
  • 对于那些在 Google 上找到这个的人(就像我刚才所做的那样):要隐藏搜索/过滤器而不禁用常规 HTML/JS Web 设置中的实际 API 功能,请使用 dom 选项。 Source

标签: r shiny dt


【解决方案1】:

稍微简单的语法,对于其他仍在寻找的人:

datatable(head(iris), options = list(dom = 't'), filter = list(position = "top"))

其他选项。要仅显示表格,请使用 dom = 't':

datatable(head(iris), options = list(dom = 't'))

显示表格和过滤器(搜索框),默认设置:

datatable(head(iris), options = list(dom = 'ft'))

来源:

https://rstudio.github.io/DT/options.html

【讨论】:

【解决方案2】:

DT 选项需要作为列表传递。此外,通过使用 sDom 初始化变量,可以指定 DOM 控件的放置位置。标准设置如下所示:

    datatable(iris, filter="top", selection="multiple", escape=FALSE, 
      options = list(sDom  = '<"top">flrt<"bottom">ip'))

语法有点古怪,但基本上上面说 f、l、r 和 t 选项将放在顶部 div 中,而 i 和 p 选项放在底部 div 中。请参阅http://legacy.datatables.net/usage/options 的文档以获得更详尽的解释。

无论如何,“f”是“过滤输入”选项(即搜索选项),通过将“f”移动到另一个 div 或省略它,我们可以移动或禁用搜索栏。您的问题的解决方案可能如下所示:

    datatable(iris, filter="top", selection="multiple", escape=FALSE, 
      options = list(sDom  = '<"top">lrt<"bottom">ip'))

【讨论】:

  • 是的,我试过了。 “全局搜索”消失了,但“列搜索”也不起作用...
  • 奇怪!以上对我来说按预期工作。您正在运行哪些版本的 R、shiny 和 DT?也许开发版效果更好:devtools::install_github('rstudio/DT')
  • 列有过滤框,但它们不起作用(尝试,如果在您的版本中相同)。我想我的 DT 很新。
  • 这对我也不起作用(DT_0.1.40)。全局搜索按预期消失,但是当我尝试过滤列时,显示的任何内容都没有改变(很可能是一个错误)。
  • 为什么不在选项中使用bFilter=0
【解决方案3】:
datatable(iris, filter="top", selection="multiple", escape=FALSE,
options = list(searching = FALSE))

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。 ref
  • 以上所有建议都没有摆脱被删除的搜索输入表单使用的列空间。删除全局搜索的最大“为什么”是在全宽屏幕上释放关键的列空间。有没有希望让这个空间闪闪发光?
  • @Marta 我认为你应该接受这个作为正确答案。
【解决方案4】:

您必须对DT::datatabledom 选项采取行动。以下对我来说很好:

datatable(iris, filter="top", selection="multiple", escape=FALSE, options = list(dom = 'ltipr'))

默认情况下DT::datatable 具有dom = 'lftipr',只需删除用于过滤器的'f'(“搜索”按钮)。

在此处了解更多关于dom 的信息: https://datatables.net/reference/option/dom

【讨论】:

    【解决方案5】:

    根据@Alex Nevsky 的评论,他的解决方案对我来说是最好的!我尝试了@Pewi 解决方案,但它删除了我的下载按钮。

    我用你的例子尝试了bFilter=0,它完全有效!

    library("shiny")
    library("DT")
    
    data(iris)
    
    ui <- fluidPage(
      
      DT::dataTableOutput("tabelka")
      
    )
    
    
    server <- function(input, output) {
      
      output$tabelka <- DT::renderDataTable({
        
        datatable(iris, 
                  filter="top", 
                  selection="multiple", 
                  escape=FALSE,
                  options = list(bFilter=0))
      })
    }
    
    
    shinyApp(ui=ui, server=server)
    

    警告,如果你想过滤你的数据框 (filter="top"),这个命令不适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多