R DT rowCallback条件格式化每个单元格

时间:2018-03-16 16:58:31

标签: javascript jquery r datatables dt

在我的DT中,我正在尝试为每个单元格创建条件格式,其中格式化基于每行的不同规则。目标是在第1列和第2列之间创建简单的可视化比较

例如

如果[1,1]< [1,2]突出[1,1]绿色& [1,2]红色

如果[2,1]< [2,2]突出[2,1]红色& [2,2]绿色

3月19日更新:为了方便起见,我建立了一个"胜利者" R中的列,我正在尝试将表中的数据与该列进行比较。

library(DT)

example.data <- data.frame(col.1 = rep(1, 2), 
                       col.2 = rep(2, 2), 
                       winner = c(1,2))

datatable(example.data,
      options = list(
        rowCallback = JS(
          'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {

                            if (parseFloat(aData[3] = 1)){ 
                              $("td:eq(1)", nRow).css("background-color", "green");
                            } 
                            if (parseFloat(aData[3] = 2)){
                              $("td:eq(1)", nRow).css("background-color", "red");
                            }

                            if (parseFloat(aData[3] = 1)){  
                              $("td:eq(2)", nRow).css("background-color", "red");
                            } 
                            if (parseFloat(aData[3] = 2)) {
                              $("td:eq(2)", nRow).css("background-color", "green");
                            }
                          }'
        )
      ))

上面的代码将第1列变为红色,第2列变为绿色。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

前面代码中的错误是由于误操作=运算符,应该是==,并使用parseFloat将参数作为浮点传递。对于任何尝试执行类似任务的人,以下示例都应该有效。

datatable(example.data,
      options = list(
        rowCallback = JS(
          'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {

                            if (aData[3] == "1"){ 
                              $("td:eq(1)", nRow).css("background-color", "green");
                            } 
                            if (aData[3] == "2"){
                              $("td:eq(1)", nRow).css("background-color", "red");
                            }

                            if (aData[3] == "1"){  
                              $("td:eq(2)", nRow).css("background-color", "red");
                            } 
                            if (aData[3] == "2") {
                              $("td:eq(2)", nRow).css("background-color", "green");
                            }
                          }'
        )
      ))