有没有一种方法可以更改所选行/列/单元格的类,而无需使用“选择”扩展?
问题:当设置
style = "bootstrap"
时,所选项目的类别为class = "active"
。因为 bootstrap 主题通常将 active
设置为某种灰色,所以 DT 必须覆盖 bootstrap 的 active
背景颜色,这样它就不会与白色/灰色交替行颜色混淆。我不想覆盖颜色,而是想将类从 active
更改为 info
。这样,我选择的任何主题都会看起来不错,并且选定的行不会与未选定的行混淆。
此外,DT 选择覆盖 bootstrap 的
active
背景颜色的蓝色使搜索词的突出显示看起来很丑陋。请参阅示例。 DT 为 style="default"
选择的蓝色并不总是与所选的引导程序主题相匹配。
顺便说一句,我使用“选择”扩展成功地将所选类别更改为
info
并在选项中进行设置,但这带来了其他问题,主要是我无法预先选择一行。
library(shiny)
library(DT)
dt <- data.frame(colA = sample(c("one","two"),10,replace=T), ColB = rnorm(10))
ui <- basicPage(
DTOutput("test_table")
)
server <- function(input, output) {
output$test_table <- renderDT({
datatable(dt,
style = "bootstrap",
selection = list(mode = "single", selected = 1),
options = list(searchHighlight = T, search = list(search = "o"))
)
})
}
shinyApp(ui = ui, server = server)
这里有一个解决方案,试图避免依赖于 DT 包编写的 html/css 结构,该结构可能会更改,恕不另行通知。它使用
bs_add_rules()
将主题的颜色分配给变量 --dt-row-selected
。该解决方案适用于 bslib 0.6.1 和 DT 0.32。
library(shiny)
library(DT)
ui <- fluidPage(
theme = bslib::bs_theme(bootswatch = "superhero") |>
bslib::bs_add_rules("
:root {
--dt-row-selected: var(--bs-primary-rgb)!important;
}"),
DTOutput("test_table")
)
server <- function(input, output) {
output$test_table <- renderDT({
datatable(
iris,
selection = list(mode = "single", selected = 2)
)
})
}
shinyApp(ui = ui, server = server)