我正在尝试在闪亮的应用程序中设置数据表中选定行的突出显示颜色。基本上我希望所选行的颜色为红色而不是蓝色。然而,我对 JavaScript 一点也不熟悉,所以我很难编写适当的回调(至少我认为这是问题所在)。这是我迄今为止尝试过的:
# ui.R
library(shiny)
fluidPage(
title = 'DataTables Test',
DT::dataTableOutput('table')
)
# server.R
library(shiny)
library(DT)
# render the table
output$table = renderDataTable(datatable(head(iris, 20),
options = list(
initComplete = JS(
"function(settings, json) {",
"var rows = $(this.api().table().rows());",
"for (var i = 0; i < rows.length; i++){ ",
"var row = rows[i];",
"row.css({'background-color': '#000', 'color': '#f00'})",
"}",
"}")
)))
})
如您所见,到目前为止我只是想弄清楚如何更改行颜色。一旦我弄清楚了这一点,我就会尝试将 css 更改为类似以下内容:
"tr.selected td, table.dataTable td.selected { background-color: #f00}"
但我还没有到达那里 - 不幸的是上面的代码对背景颜色没有任何作用。如果有人可以帮助我解决整个解决方案,那就太好了。
这应该可以完成工作:
#rm(list = ls())
library(shiny)
library(DT)
ui <- basicPage(
tags$style(HTML('table.dataTable tr.selected td, table.dataTable td.selected {background-color: pink !important;}')),
mainPanel(DT::dataTableOutput('mytable'))
)
server <- function(input, output,session) {
output$mytable = DT::renderDataTable(
datatable(mtcars)
)
}
runApp(list(ui = ui, server = server))
如果有人遇到和我一样的问题:如果您在数据表中使用“bootstrap”样式,则需要将“.selected”更改为“.active”,否则它将无法工作。例如Pork Chop提供的答案中:
library(shiny)
library(DT)
ui <- basicPage(
tags$style(HTML('table.dataTable tr.active td, table.dataTable tr.active {background-color: pink !important;}')),
mainPanel(DT::dataTableOutput('mytable'))
)
server <- function(input, output,session) {
output$mytable = DT::renderDataTable(
datatable(mtcars, style="bootstrap")
)
}
runApp(list(ui = ui, server = server))
编辑: 从 DataTables v1.12 开始,
background-color
不再起作用:现在控制行颜色的属性是 box-shadow
(请参阅:https://datatables.net/blog/2022-05-13#Row-colouring-improvements ,https://www.w3schools.com/CSSREF/css3_pr_box-shadow.php)。
tags$style(HTML('table.dataTable tr.selected td, table.dataTable tr.selected {box-shadow: inset 0 0 0 9999px pink !important;}'))
并采用“引导”样式:
tags$style(HTML('table.dataTable tr.active td, table.dataTable tr.active {box-shadow: inset 0 0 0 9999px pink !important;}'))