DT包datatable隐藏行名(rownames=FALSE)时如何设置首尾行背景色?
问题描述
想要修改DT包datatable的第一行和最后一行背景色,但仅当设置rownames=TRUE时,才能基于行号用styleEqual或styleInterval设置样式,而我不希望最终输出显示行名列。
示例数据框代码:
df <- data.frame(city = c("A","B","C","D","E"), value = c(0,4,10,15,2), rank = c("5°", "3°", "2°", "1°", "4°")) %>% arrange(desc(value))
当rownames=TRUE时可实现目标效果,但设置rownames=FALSE时原代码失效,求隐藏行名时设置首尾行背景色的可行方法。
解决方案
方法1:使用rowCallback直接操作DOM
无需依赖行名列,通过JavaScript回调函数定位首尾行并设置样式:
DT::datatable(df, rownames = FALSE) %>% rowCallback(JS( 'function(row, data, displayIndex){ const table = $("#" + this.id).DataTable(); const rowCount = table.data().count(); // 设置第一行样式 if(displayIndex === 0){ $(row).css({"background-color": "#2ecc71", "color": "#ecf0f1"}); } // 设置最后一行样式 if(displayIndex === rowCount - 1){ $(row).css({"background-color": "#e74c3c", "color": "#ecf0f1"}); } }' ))
displayIndex为行的显示索引(从0开始计数),通过table.data().count()获取总行数,精准定位最后一行,直接修改行的CSS样式。
方法2:显示行名后隐藏行名列
保留行号用于样式判断,再通过配置隐藏行名列:
total_rows <- nrow(df) DT::datatable(df, rownames = TRUE) %>% formatStyle(0, target = "row", color = styleEqual(c(1, total_rows), "#ecf0f1"), backgroundColor = styleEqual(c(1, total_rows), c("#2ecc71", "#e74c3c"))) %>% formatStyle(columns = 0, visible = FALSE)
先开启rownames=TRUE,用styleEqual指定第1行和最后一行(总行数用nrow(df)动态获取,避免硬编码),最后将第0列(行名列)设置为不可见,达成隐藏行名且样式生效的效果。
内容的提问来源于stack exchange,提问作者Lucca Nielsen
相关产品推荐
相关产品推荐

