Для полноты представляем три решения: drawCallback
, rowCallback
и table.on
. drawCallback было дано в качестве ответа выше.
columnDefs может использоваться для назначения класса столбцу, что упрощает использование селекторов. rowCallback является альтернативой drawCallback. И, наконец, события могут быть назначены с помощью on () в API datatables для событий мыши, но вы должны управлять как mouseenter
, так и mouseleave
вместо удобного метода jQuery hover()
. (Это последнее решение вызывает недоумение, поскольку в документации (1) нет второго параметра селектора и (2), события мыши не перечислены в API-интерфейсе , но это работает !)
Важно, нужен только один из них, а не все три! Лично мне нравится rowCallback
как наиболее сжатый.
library(shiny)
library(DT)
ui <- fluidPage(
tags$head(tags$style(HTML(".red { background-color: red; }"))),
div(id='tbl1', DT::dataTableOutput("iris"))
)
server <- function(input, output) {
output$iris <- DT::renderDataTable(DT::datatable(iris,
options = list(drawCallback=JS("function() { this.api().table().column(0).nodes().to$().hover(function(){$(this).toggleClass('red');}); }"),
rowCallback=JS("function(row) { $(row).children('.firstcol').hover(function(){$(this).toggleClass('red')}) }"),
columnDefs=list(list(className='firstcol', targets=0))),
callback = JS("
table.on('mouseenter', 'td.firstcol', function() { $(this).addClass('red'); });
table.on('mouseleave', 'td.firstcol', function() { $(this).removeClass('red'); });
")))
}
shinyApp(ui = ui, server = server)