我想在启动时选择数据表的第一行。我打算使用这个 JS 片段,但不确定它是否正确:
dataTable.row(':eq(0)').select();
它不起作用:
library(shiny)
library(DT)
js <- c(
"table.on('initComplete', function(settings, json) {",
" this.row(':eq(0)').select();",
" }",
"});"
)
ui <- fluidPage(
DTOutput("table")
)
server <- function(input, output, session) {
output$table <- renderDT({
datatable(
mtcars,
callback = JS(js)
)
})
}
shinyApp(ui, server, options = list(
launch.browser = TRUE
))
但我不知道如何从我闪亮的应用程序中找到变量名称:
library(shiny)
library(shinyjs)
library(DT)
ui <- fluidPage(
useShinyjs(),
DTOutput("table")
)
server <- function(input, output, session) {
output$table <- renderDT({
datatable(
mtcars
)
})
### I need to know the `dataTableVariable`
runjs("dataTableVariable.row(':eq(0)').select();")
}
shinyApp(ui, server, options = list(
launch.browser = TRUE
))
请注意,您的
callback
的一个问题是末尾有一个 }
太多。通过一些小的修改,我们可以将 callback
传递给 initComplete
的 dataTable
选项,然后它就会起作用:
library(shiny)
library(DT)
js <- c(
"function() {",
" $(this.api().table().row(':eq(0)').node()).addClass('selected');",
"}"
)
ui <- fluidPage(
DTOutput("table")
)
server <- function(input, output, session) {
output$table <- renderDT({
datatable(
mtcars,
options = list(
initComplete = JS(js)
)
)
})
}
shinyApp(ui, server)
另一种可能性是直接在应用程序内设置定义:
library(shiny)
library(DT)
js <- "
$('#table').on('init.dt', function() {
$(this).find('tbody tr:first-child').addClass('selected');
});
"
ui <- fluidPage(DTOutput("table"),
tags$script(JS(js)))
server <- function(input, output, session) {
output$table <- renderDT({
datatable(mtcars)
})
}
shinyApp(ui, server)