特定于目标的DT::datatable表,使用initComplete在闪亮的应用程序中使用Javascript
假设我们有一个闪亮的应用程序,其中有两个特定于目标的DT::datatable表,使用initComplete在闪亮的应用程序中使用Javascript,javascript,r,shiny,datatables,dt,Javascript,R,Shiny,Datatables,Dt,假设我们有一个闪亮的应用程序,其中有两个DT表,我们希望在呈现表之后使用一些Javascript对其进行修改。我们在每个表的标题后面加上不同的上标;我们将上标“1”附加到表1,将上标“2”附加到表2。此JS使用initComplete触发,即在呈现表格时触发 我的JS技能不存在,因此我目前正在使用th:contains()选择要附加到的表头。例如,将上标添加到包含字符串“seval”的表头: jsc <- ' function(settings, json) { $
DT
表,我们希望在呈现表之后使用一些Javascript对其进行修改。我们在每个表的标题后面加上不同的上标;我们将上标“1”附加到表1,将上标“2”附加到表2。此JS使用initComplete
触发,即在呈现表格时触发
我的JS技能不存在,因此我目前正在使用th:contains()
选择要附加到的表头。例如,将上标添加到包含字符串“seval”的表头:
jsc <- '
function(settings, json) {
$("th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
结果导致了警告
renderWidget(实例)中的警告:
忽略显式提供的小部件ID“table1”;闪亮不使用它们
下面是一个可复制的示例。这两个表具有相同的列名,因此Javascript在每个表的Sepal.Length
标题中添加了两个上标。所需的输出是第一个表的Sepal.Length
标题上标为“1”,第二个表的Sepal.Length
标题上标为“2”,而当前示例将“12”附加到两个表的标题上
有趣的是,当应用程序在RStudio查看器中打开时,只运行第一个initComplete
,因此两个表头都有上标“1”。我忽略了这一点,并在Firefox和Chrome上检查结果
library(shiny)
library(DT)
jsc <- '
function(settings, json) {
$("th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
jsc2 <- '
function(settings, json) {
$("th:contains(\'Sepal\')").append(\'<sup>2</sup>\');
}
'
ui <- {
fluidPage(
fluidRow(
column(6,
DTOutput('table1')
),
column(6,
DTOutput('table2')
)
)
)
}
server <- function(input, output, session) {
output$table1 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options(
initComplete = JS(jsc))
)
})
output$table2 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options(
initComplete = JS(jsc2)
)
)
})
}
options(shiny.launch.browser = TRUE)
shinyApp(ui, server)
库(闪亮)
图书馆(DT)
jsc首先,选项必须是一个列表:
datatable(iris[, c('Species', 'Sepal.Length')],
options = list(
initComplete = JS(jsc)
)
)
现在,您可以通过在jQuery选择器中提供id来确定表的目标:
jsc <- '
function(settings, json) {
$("#table1 th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
完整代码:
library(shiny)
library(DT)
jsc <- '
function(settings, json) {
var $table = $(this.api().table().node());
$table.find("th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
jsc2 <- '
function(settings, json) {
var $table = $(this.api().table().node());
$table.find("th:contains(\'Sepal\')").append(\'<sup>2</sup>\');
}
'
ui <- {
fluidPage(
fluidRow(
column(6,
DTOutput('table1')
),
column(6,
DTOutput('table2')
)
)
)
}
server <- function(input, output, session) {
output$table1 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options = list(
initComplete = JS(jsc)
)
)
})
output$table2 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options = list(
initComplete = JS(jsc2)
)
)
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(DT)
jsc
jsc <- '
function(settings, json) {
var $table = $(this.api().table().node());
$table.find("th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
library(shiny)
library(DT)
jsc <- '
function(settings, json) {
var $table = $(this.api().table().node());
$table.find("th:contains(\'Sepal\')").append(\'<sup>1</sup>\');
}
'
jsc2 <- '
function(settings, json) {
var $table = $(this.api().table().node());
$table.find("th:contains(\'Sepal\')").append(\'<sup>2</sup>\');
}
'
ui <- {
fluidPage(
fluidRow(
column(6,
DTOutput('table1')
),
column(6,
DTOutput('table2')
)
)
)
}
server <- function(input, output, session) {
output$table1 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options = list(
initComplete = JS(jsc)
)
)
})
output$table2 <- renderDT({
datatable(iris[, c('Species', 'Sepal.Length')],
options = list(
initComplete = JS(jsc2)
)
)
})
}
shinyApp(ui, server)