Изменение размера заполнения строки с данными

#css #r #shiny #datatable #shinyjs

#css #r #блестящий #datatable #shinyjs

Вопрос:

У меня есть небольшое блестящее приложение R https://kormir.shinyapps.io/dt_test /

 library(shiny)
library(DT)

ui <- fluidPage(
            column(4,
                   br(),
                   br(),
                   dataTableOutput('dt1')
                   )
)

server <- function(input, output) {
    output$dt1 <- renderDataTable({
        datatable(mtcars[1:4,1:4])
    })
}

shinyApp(ui = ui, server = server)
 

In использует пакет datatable для создания динамических таблиц.
Я хотел бы уменьшить внутренние отступы, но навыки css недостаточно хороши для этого.

введите описание изображения здесь

Мне нужно удалить эту желтую область или сделать ее очень маленькой. Например, я вычислил класс строк и попытался принудительно увеличить размер этих заполнений до 0.

  .odd {
    background-color: red!important;
    border-collapse: collapse!important;
    padding: 0!important;
    border : 0px !important;
} 
 

Это не работает…

Ответ №1:

Редактировать

Мое первоначальное решение не учитывало интерактивные изменения в таблице во время сеанса. Следующая инъекция js при инициализации таблиц function(){$('tbody td').css({'padding': '0px'});} данных применяет изменение заполнения к исходному состоянию таблицы, но любые изменения, такие как сортировка и разбивка на страницы, приведут к возврату таблицы к ее начальной настройке отображения.

Как насчет введения некоторого javascript при инициализации таблиц данных с initComplete аргументом in Options ?

Для этого у вас должен быть htmlwidgets установлен пакет, чтобы вы могли использовать JS() функцию. JS() обрабатывает строки как код javascript.

DT::datatable() имеет options аргумент, который соответствует Options в таблицах данных. options принимает список именованных аргументов DataTables Options .

В options , укажите именованный список с initComplete аргументом. Там введите некоторый js, htmlwidgets::JS() и обратный вызов js будет выполнен при инициализации ваших таблиц данных.

DataTables имеет несколько параметров стиля по умолчанию, в том числе вызываемый compact . Вот что делает включение опции compact стилизации (цитата отсюда):

Уменьшите количество пробелов, используемых в стилизации по умолчанию для таблицы данных, увеличивая плотность информации на экране

Итак, следующий шаг — добавить класс compact к вашему объекту DataTables в DOM следующим образом:

Важная часть js:

function(){$(this).addClass('compact');}

$(...) это синтаксис jQuery для доступа к элементам в DOM. Внутри $(...) находится селектор элемента DOM, который вы хотите выбрать. К счастью, поскольку вы вводите этот js-код в событие DataTables, вы можете использовать this селектор для ссылки на таблицу. Следующий метод addClass() . Он делает то, что говорит: он добавляет класс к выбранному объекту в DOM. Вы хотите добавить класс compact в свою таблицу, а затем DataTables позаботятся обо всем остальном.

Хорошо, вот код:

 library(shiny)
library(DT)

ui <- fluidPage(
  column(4,
         br(),
         br(),
         dataTableOutput('dt1')
  )
)

server <- function(input, output) {
  output$dt1 <- renderDataTable({
    datatable(mtcars, 
              options = list(
                initComplete = JS(
                  "function(){$(this).addClass('compact');}")
              )
    )
  })
}

shinyApp(ui = ui, server = server, options = list(launch.browser=TRUE))
 

Результат:
введите описание изображения здесь

После изменения нумерации страниц и сортировки по cyl :

введите описание изображения здесь

compact стиль по-прежнему применяется.

Комментарии:

1. Элегантный пример, показывающий силу внедрения JS таким образом!

2. Существует проблема. Теперь смотрите приложение с DT, имеющим несколько страниц. Если вы измените страницу, форматирование исчезнет. kormir.shinyapps.io/dt_test

3. Это отличное решение! Спасибо.