Javascript 在R中的数据表中添加工具提示

Javascript 在R中的数据表中添加工具提示,javascript,r,shiny,dt,Javascript,R,Shiny,Dt,我正在尝试使用JS script attr函数添加工具提示,说明编写的脚本没有给出所需的结果(为datatable的第1列添加工具提示)。由于我是新的JS脚本,因此无法调试错误,有人能告诉我为什么下面的代码没有给出正确的结果吗。下面是一段代码: library(shiny) library(DT) shinyApp( ui = fluidPage( DT::dataTableOutput("table2") ), server = function(input, output) { ou

我正在尝试使用JS script attr函数添加工具提示,说明编写的脚本没有给出所需的结果(为datatable的第1列添加工具提示)。由于我是新的JS脚本,因此无法调试错误,有人能告诉我为什么下面的代码没有给出正确的结果吗。下面是一段代码:

library(shiny)
library(DT)

shinyApp(
ui = fluidPage(

DT::dataTableOutput("table2")

),
server = function(input, output) {

output$table2<-DT::renderDataTable({
  responseDataFilter2_home<-iris[,c(4,3,1)]
  displayableData<-as.data.frame(responseDataFilter2_home, stringAsFactors = FALSe, row.names = NULL)
},server = TRUE, selection = 'single',callback = JS("table.on('dblclick.dt', 'td', function(nRow, aData){
                                                         var row=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                         Shiny.onInputChange('rows_home',[row, Math.random()]);});
                                                         table.on('click.dt', 'td', function(nRow, aData) {
                                                         var k=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                         if(table.rows('.selected').indexes().toArray()!= '' && table.rows('.selected').indexes().toArray() ==k){
                                                         k=-1;}
                                                         Shiny.onInputChange('rows_up_home',[k, Math.random()]);
                                                         });"),
escape=FALSE,options=list(paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 400,scrollCollapse=TRUE,
                          columnDefs = list(list(width = '800%', targets = c(1)))),rownames=FALSE,colnames="Name")

}
)
库(闪亮)
图书馆(DT)
shinyApp(
ui=fluidPage(
DT::dataTableOutput(“表2”)
),
服务器=功能(输入、输出){

输出$table2您可以从这个最小的工作示例开始:

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(

    DT::dataTableOutput("table2")

  ),
  server = function(input, output) {

    output$table2<-DT::renderDataTable({
      responseDataFilter2_home<-iris[,c(4,3,1)]
      displayableData<-DT::datatable(responseDataFilter2_home,options = list(rowCallback = JS(
        "function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {",
        "var full_text = aData[1] + ','+ aData[2]",
        "$('td:eq(1)', nRow).attr('title', full_text);",
        "}")
      ))#, stringAsFactors = FALSe, row.names = NULL)
    },server = TRUE, selection = 'single', escape=FALSE,options=list(paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 400,scrollCollapse=TRUE,
                          columnDefs = list(list(width = '800%', targets = c(1)))),rownames=FALSE,colnames="Name")

    }
 )
库(闪亮)
图书馆(DT)
shinyApp(
ui=fluidPage(
DT::dataTableOutput(“表2”)
),
服务器=功能(输入、输出){

输出$table2您可以从这个最小的工作示例开始:

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(

    DT::dataTableOutput("table2")

  ),
  server = function(input, output) {

    output$table2<-DT::renderDataTable({
      responseDataFilter2_home<-iris[,c(4,3,1)]
      displayableData<-DT::datatable(responseDataFilter2_home,options = list(rowCallback = JS(
        "function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {",
        "var full_text = aData[1] + ','+ aData[2]",
        "$('td:eq(1)', nRow).attr('title', full_text);",
        "}")
      ))#, stringAsFactors = FALSe, row.names = NULL)
    },server = TRUE, selection = 'single', escape=FALSE,options=list(paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 400,scrollCollapse=TRUE,
                          columnDefs = list(list(width = '800%', targets = c(1)))),rownames=FALSE,colnames="Name")

    }
 )
库(闪亮)
图书馆(DT)
shinyApp(
ui=fluidPage(
DT::dataTableOutput(“表2”)
),
服务器=功能(输入、输出){

output$table2我用我在本文中给出的答案修改了您的代码,这样您就可以在不影响JS代码其他部分的情况下获得工具提示:

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(

    DT::dataTableOutput("table2")

  ),
  server = function(input, output) {

    output$table2<-DT::renderDataTable({
      responseDataFilter2_home<-iris[,c(4,3,1)]
      displayableData<-DT::datatable(data = as.data.frame(responseDataFilter2_home, stringAsFactors = FALSE, row.names = NULL),rownames = FALSE,
                                     escape = FALSE, selection = 'single', callback =  JS("table.on('dblclick.dt', 'td', function(nRow, aData){
                                                         var row=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                        Shiny.onInputChange('rows_home',[row, Math.random()]);});
                                                        table.on('click.dt', 'td', function(nRow, aData) {
                                                        var k=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                        if(table.rows('.selected').indexes().toArray()!= '' && table.rows('.selected').indexes().toArray() ==k){
                                                        k=-1;}
                                                        Shiny.onInputChange('rows_up_home',[k, Math.random()]);
                                                        });"),

                                     options = list(rowCallback = JS(
                                       "function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {",
                                       "var full_text = aData[0] + ','+ aData[1];",
                                       "$('td:eq(0)', nRow).attr('title', full_text);",
                                       "}"),paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 400,scrollCollapse=TRUE,
                                       columnDefs = list(list(width = '800%', targets = c(1))),colnames="Name") )


    })

    })
库(闪亮)
图书馆(DT)
shinyApp(
ui=fluidPage(
DT::dataTableOutput(“表2”)
),
服务器=功能(输入、输出){

output$table2我用我在本文中给出的答案修改了您的代码,这样您就可以在不影响JS代码其他部分的情况下获得工具提示:

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(

    DT::dataTableOutput("table2")

  ),
  server = function(input, output) {

    output$table2<-DT::renderDataTable({
      responseDataFilter2_home<-iris[,c(4,3,1)]
      displayableData<-DT::datatable(data = as.data.frame(responseDataFilter2_home, stringAsFactors = FALSE, row.names = NULL),rownames = FALSE,
                                     escape = FALSE, selection = 'single', callback =  JS("table.on('dblclick.dt', 'td', function(nRow, aData){
                                                         var row=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                        Shiny.onInputChange('rows_home',[row, Math.random()]);});
                                                        table.on('click.dt', 'td', function(nRow, aData) {
                                                        var k=table.cell(this).index().row;
                                                        var full_text = aData[1] + ','+ aData[2]
                                                        $('td:eq(1)', nRow).attr('title', full_text);
                                                        if(table.rows('.selected').indexes().toArray()!= '' && table.rows('.selected').indexes().toArray() ==k){
                                                        k=-1;}
                                                        Shiny.onInputChange('rows_up_home',[k, Math.random()]);
                                                        });"),

                                     options = list(rowCallback = JS(
                                       "function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {",
                                       "var full_text = aData[0] + ','+ aData[1];",
                                       "$('td:eq(0)', nRow).attr('title', full_text);",
                                       "}"),paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 400,scrollCollapse=TRUE,
                                       columnDefs = list(list(width = '800%', targets = c(1))),colnames="Name") )


    })

    })
库(闪亮)
图书馆(DT)
shinyApp(
ui=fluidPage(
DT::dataTableOutput(“表2”)
),
服务器=功能(输入、输出){

输出$table2请您解释一下您到底想在工具提示中显示什么?@SBista我正在尝试将col1和col2串联起来,并通过保持JS脚本的其他部分不变来显示与col1中的工具提示相同的内容,因为它们是为其他功能设计的。您能解释一下您到底想显示什么吗在你的工具提示中?@SBista我试图将col1和col2串联起来,并通过保持JS脚本的其他部分不变来显示与col1中的工具提示相同的内容,因为它们是为其他功能而设计的。谢谢你的建议。当我尝试将其与现有代码中的现有JS元素集成时,工具提示不起作用。并且这就是我的原始代码的问题-其他东西可以工作,但工具提示不起作用。有什么解决方法吗?除了添加工具提示之外,你还想做什么?你的代码对于工具提示很好,但是我需要将工具提示与已经编写的JS脚本集成,因为我遇到了这个问题。谢谢你的帮助您的努力。感谢您的建议。当我尝试将此与现有代码中的现有JS元素集成时,工具提示不起作用。这就是我的原始代码的问题-其他东西起作用,但工具提示不起作用。有什么解决方法吗?除了添加工具提示之外,您还想做什么al code?你的代码对工具提示很好,但我需要将工具提示与已经编写的JS脚本集成,因为我遇到了问题。感谢你的努力。谢谢你。这很有帮助。只需再查询一次-因为显示的表有3列-4,3,1。现在,如果我需要在col1上使用col 2和col 5的工具提示,那么对于相同的表,可以做什么呢?实际的表will dispaly col-4,3,1 only,但工具提示的串联将有2和5。以iris表为例。由于您仅提取了列4,3和1的数据,datatable将无法访问列2和列5的值。为此,我想最好的方法是在显示时隐藏不需要的列,而不是提取列从
iris
responseDataFilter2\u home
。谢谢。明白了。要动态隐藏cols,我们可以添加此代码-columnDefs=list(list(width='800%,visible=FALSE,targets=c(3,4)))谢谢。这很有帮助。只需再进行一次查询-因为显示的表有3列-4,3,1。现在,如果我需要在col1上有col 2和col 5的工具提示,那么同样的解决方法是什么。实际的表将只显示col-4,3,1,但工具提示的串联将有2和5。以iris表为例。因为您已经提取了4,3和1o列的数据仅此而已,datatable将无法访问第2列和第5列的值。为此,我想最好的方法是在显示时隐藏不需要的列,而不是将列从
iris
提取到
responseDataFilter2\u home
。谢谢。明白了。要动态隐藏列,我们可以添加此代码-columnDefs=list(list(宽度=800%,可见=FALSE,目标=c(3,4)))