如何为R Shiny中响应式表达式的表格最后一行设置加粗?
解决DT表格仅最后一行加粗的问题
你现在遇到的问题是不小心把整个表格都设置成加粗了,而我们只需要让Net Total那一行(也就是表格的最后一行)单独加粗。DT包提供了rowCallback这个JS回调函数,可以精准地针对特定行设置样式,下面给你两种实用的解决方案:
方案1:根据行内容(Net Total)匹配
这个方案适合最后一行的内容固定为"Net Total"的场景,不管表格行数有没有变化,都能精准定位到目标行:
output$service_table <- DT::renderDataTable( if(input$plot.options == "Dollar Amount") { table() %>% DT::datatable(options = list( rowCallback = htmlwidgets::JS( "function(row, data) {", " // 注意:JS数组索引从0开始,这里data[0]对应R表格里的第一列(expression列)", " if (data[0] === 'Net Total') {", " $('td', row).css('font-weight', 'bold');", " }", "}" ) )) } )
小提示:如果你的
expression列不是表格的第一列,记得把data[0]改成对应的索引(比如是第2列就用data[1])。
方案2:直接定位最后一行(通用型)
如果表格的行数可能变化,或者不想依赖内容匹配,直接通过行索引定位最后一行会更通用:
output$service_table <- DT::renderDataTable( if(input$plot.options == "Dollar Amount") { # 先把响应式表格存成临时变量,方便获取行数 tbl <- table() DT::datatable(tbl, options = list( rowCallback = htmlwidgets::JS( sprintf( "function(row, data, index) {", " if (index === %d) {", " $('td', row).css('font-weight', 'bold');", " }", "}", nrow(tbl) - 1 # JS里的行索引从0开始,所以最后一行是总行数减1 ) ) )) } )
注意事项
- 记得移除之前导致全表加粗的代码(比如全表的
formatStyle设置),不然会和这个行级样式冲突。 - 如果需要给最后一行设置其他样式(比如背景色),可以在
css里添加更多属性,比如$('td', row).css({'font-weight': 'bold', 'background-color': '#f0f0f0'});。
内容的提问来源于stack exchange,提问作者datanalyst
相关产品推荐
相关产品推荐

