Search code examples
rdt

Conditional formatting for column


I need some help with conditional formatting for DT::datatable. I would like to highlight a couple of names in the following example by printing them in italics. The names which need to be highlighted are in a vector name.highlight <- c("ABC","JKL")

require(DT)

mydf <- data.frame(name=c("ABC","DEF","GHI","JKL","MNO","PQR"), value=1:6)
DT::datatable(mydf)

Based on what I see here and here, seems like I need to use render. I have no idea how to write the JS code or how I can pass in a vector/container with all the strings which need to be highlighted.

datatable(mydf, options = list(columnDefs = list(list(
targets = 0, render = JS("function(data, type, full, meta) {", ..., "}")
))))

Solution

  • datatable(mydf, options = list(columnDefs = list(list(
        targets = 0, render = JS(
            "function(data, type, full, meta) {",
                "italic_words=['ABC','JKL']",
                "return type === 'display' && italic_words.indexOf(data) != -1 ?",
                "'<i>'+data+'</i>' : data;",
            "}")
    ))))
    

    I defined the italic_words variable in the javascript function. The variable contains an array of all the words you want in italic. Then I used the indexOf() javascript function. If the name isn't in the variable italic_words, this function will return -1, and the name will not be italicized.