【问题标题】:R Shiny: Get DT row background color on top of column background colorR Shiny:在列背景颜色之上获取 DT 行背景颜色
【发布时间】:2019-03-31 13:51:46
【问题描述】:

我在一个闪亮的应用程序中使用DT::renderDT,并且正在为某些列和行设置背景颜色。我需要行背景颜色位于列背景颜色之上。我尝试切换formatStyle 的顺序,但没有奏效。这是一个小例子-

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(
    DTOutput("table")
  ),
  server = function(input, output, session) {    
    output$table <- renderDT({
      head(iris) %>%
        datatable() %>%
        formatStyle(c(2,4), backgroundColor = "#fcf4d9") %>%
        formatStyle(1, target = 'row', 
          backgroundColor = styleEqual(c(4.7, 5), c("#fc8a8a", "#fc8a8a"))
          # comment above row and ucomment below row for row color using styleInterval()
          # backgroundColor = styleInterval(c(0, 5, 9), c('blue', 'green', 'red', 'orange'))

        )
    })
  }
)

styleEqual() 的结果(不正确)-

StyleInterval() 的结果(不正确)-

行颜色必须在黄色(列颜色)之上。

正在寻找适用于多行和styleEqual()styleInterval() 的通用解决方案。任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: javascript css r shiny dt


    【解决方案1】:

    这里有一个解决方案:

    rowCallback <- c(
      "function(row, data, displayNum, displayIndex, dataIndex){",
      "  if(data[1] === 4.7){",
      "    $(row).find('td').addClass('red');",
      "  }",
      "}"
    )
    
    shinyApp(
      ui = fluidPage(
        tags$head(
          tags$style(
            HTML(
              "table.dataTable tbody tr td.red {background-color: #fc8a8a !important}"
            )
          )
        ),
        DTOutput("table")
      ),
      server = function(input, output, session) {    
        output$table <- renderDT({
          head(iris) %>%
            datatable(options = list(rowCallback = JS(rowCallback))) %>%
            formatStyle(c(2,4), backgroundColor = "#fcf4d9")
        })
      }
    )
    

    【讨论】:

    • 嘿,非常感谢您的解决方案。对于我有不止一行要着色的情况(我不擅长 JS),我无法概括它。我相应地更新了问题。如果您可以在答案中包含一些关于如何概括的解释,那就太好了。谢谢!
    • @Shree 我不清楚。您能否举一个多行的示例,包括 styleInterval
    • 嘿,我的示例显示 2 行 Sepal.Length = c(4.7, 5) 使用 styleEqual() 着色为红色。还更新了示例以包含 styleInterval()。如果还不清楚,请告诉我。谢谢!
    • 对于styleEqual(4.7,5),只需将if(data[1] === 4.7) 替换为if(data[1] === 4.7 || data[1] === 5)
    • @Shree 我看不出你对styleInterval 的期望:这将为每一行 行添加背景颜色,因此如果此背景在顶部,则背景因为列将不可见。
    猜你喜欢
    • 2018-11-11
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多