Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定于目标的DT::datatable表,使用initComplete在闪亮的应用程序中使用Javascript_Javascript_R_Shiny_Datatables_Dt - Fatal编程技术网

特定于目标的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)