R Shiny: получить цвет фона строки DT поверх цвета фона столбца

Я использую DT::renderDT в блестящем приложении и форматирую цвет фона для определенных столбцов и строк. Мне нужно, чтобы цвет фона строки был поверх цвета фона столбца. Я попытался переключить порядок formatStyle, но это не сработало. Вот небольшой пример -

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(
    DTOutput("table")
  ),
  server = function(input, output, session) {    
    output$table <- renderDT({
      head(iris) %>%
        datatable() %>%
        formatStyle(c(2,4), backgroundColor = "#fcf4d9") %>%
        formatStyle(1, target = 'row', 
          backgroundColor = styleEqual(c(4.7, 5), c("#fc8a8a", "#fc8a8a"))
          # comment above row and ucomment below row for row color using styleInterval()
          # backgroundColor = styleInterval(c(0, 5, 9), c('blue', 'green', 'red', 'orange'))

        )
    })
  }
)

Результат (неверный) с styleEqual() -

R Shiny: получить цвет фона строки DT поверх цвета фона столбца

Результат (неверный) с StyleInterval() -

R Shiny: получить цвет фона строки DT поверх цвета фона столбца

The row colors need to be on top of yellow (column color).

Ищете обобщенное решение, которое работало бы для нескольких строк и с styleEqual() или styleInterval(). Любая помощь приветствуется. Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 084
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот решение:

rowCallback <- c(
  "function(row, data, displayNum, displayIndex, dataIndex){",
  "  if (data[1] === 4.7){",
  "    $(row).find('td').addClass('red');",
  "  }",
  "}"
)

shinyApp(
  ui = fluidPage(
    tags$head(
      tags$style(
        HTML(
          "table.dataTable tbody tr td.red {background-color: #fc8a8a !important}"
        )
      )
    ),
    DTOutput("table")
  ),
  server = function(input, output, session) {    
    output$table <- renderDT({
      head(iris) %>%
        datatable(options = list(rowCallback = JS(rowCallback))) %>%
        formatStyle(c(2,4), backgroundColor = "#fcf4d9")
    })
  }
)

Привет, большое спасибо за решение. Я не мог обобщить это для случаев, когда мне нужно раскрасить более одной строки (я плохо разбираюсь в JS). Я обновил вопрос соответственно. Было бы здорово, если бы вы могли включить в свой ответ какое-то объяснение того, как обобщать. Спасибо!

Shree 11.06.2019 03:13

@Shree Мне непонятно. Не могли бы вы привести пример для нескольких строк, включая styleInterval?

Stéphane Laurent 11.06.2019 10:14

Привет, мой пример показывает 2 ряда Sepal.Length = c(4.7, 5), окрашенных в красный цвет с использованием styleEqual(). Также обновлен пример, чтобы включить styleInterval(). Дайте мне знать, если все еще непонятно. Спасибо!

Shree 11.06.2019 16:22

Для styleEqual(4.7,5) просто замените if (data[1] === 4.7) на if (data[1] === 4.7 || data[1] === 5).

Stéphane Laurent 11.06.2019 16:29

@Shree Я не понимаю, чего вы ожидаете от styleInterval: это добавит цвет фона в строку каждый, поэтому, если этот фон находится сверху, фон для столбцов будет невидимым.

Stéphane Laurent 11.06.2019 16:45

Да, ваша точка зрения о styleInterval() имеет смысл. Я сосредоточился только на коде и не думал об этом. Также ваше решение для styleEqual(4.7, 5) пока годно. Спасибо за помощь!

Shree 11.06.2019 16:55

Другие вопросы по теме