【发布时间】:2022-05-10 17:47:39
【问题描述】:
我想要一个表格 dt1 格式的表格(旋转和冻结列名,窄列宽,水平和垂直滚动条)加上冻结第一列。 我可以使用“extensions =c("FixedColumns")”冻结第一列,但随后列宽会增加(参见表 dt2),尽管使用了“columnDefs”,但我无法定义更小的列宽。
谁能帮帮我?
library(DT)
headerCallback <- c(
"function(thead, data, start, end, display){",
" var $ths = $(thead).find('th');",
" $ths.css({'vertical-align': 'bottom', 'white-space': 'nowrap'});",
" var betterCells = [];",
" $ths.each(function(){",
" var cell = $(this);",
" var newDiv = $('<div>', {height: 'auto', width: cell.height()});",
" var newInnerDiv = $('<div>', {text: cell.text()});",
" newDiv.css({margin: 'auto'});",
" newInnerDiv.css({",
" transform: 'rotate(180deg)',",
" 'writing-mode': 'tb-rl',",
" 'white-space': 'nowrap'",
" });",
" newDiv.append(newInnerDiv);",
" betterCells.push(newDiv);",
" });",
" $ths.each(function(i){",
" $(this).html(betterCells[i]);",
" });",
"}"
)
df <- iris[,c(5, 1:4, 1:4, 1:4)]
dt1 <- datatable(df, rownames=FALSE,
class = 'cell-border stripe',
extensions = c("FixedHeader"), #, c("FixedColumns", "FixedHeader")
options = list(dom = 't',
ordering=F, #no column sorting
scrollY = '600px', paging = FALSE, scrollX = TRUE,
fixedHeader=TRUE,
headerCallback = JS(headerCallback),
fixedColumns = list(leftColumns = 1)))
dt2 <- datatable(df, rownames=FALSE,
class = 'cell-border stripe',
extensions =c("FixedColumns", "FixedHeader"),
options = list(dom = 't',
ordering=F, #no column sorting
scrollY = '600px', paging = FALSE, scrollX = TRUE,
fixedHeader=TRUE,
#define col withs does not help
autoWidth = TRUE,
columnDefs = list(list(width = '15px', targets = "_all")),
columnDefs = list(list(className = "nowrap", targets = "_all")),
##
headerCallback = JS(headerCallback),
fixedColumns = list(leftColumns = 1)))
【问题讨论】:
-
一种解决方案可能是显示行名并冻结行名而不是第一列。有人知道如何冻结行名吗?
标签: r freeze dt column-width