formattable单元格显示HTML代码问题:如何正常显示加粗total文本?
解决formattable中total单元格显示HTML标签而非加粗样式的问题
问题分析
你的代码存在两个关键问题导致异常:
- CSS属性拼写错误:将
font.weight误写为front.weight,导致加粗样式本就无法正常生效 - 格式化规则冲突:同时设置了整行(第3行)的span格式化规则和
category列的单独格式化规则,当category列值为total时直接返回原始值x,触发HTML标签转义,最终显示成带标签的文本而非样式化内容
修复方案
方案1:合并规则,统一处理样式
直接在category列的格式化规则中同时处理颜色和加粗,避免规则冲突,同时修正属性拼写错误:
library(tidyverse) library(formattable) df <- data.frame(category=c('a','b','total'),value=c(1,2,3)) formattable(df,list( category = formatter("span", style = x ~ style( color = ifelse(x != 'total', "red", "inherit"), font.weight = ifelse(x == 'total', "bold", "normal") )), # 给第3行的value列也设置加粗 value = formatter("span", style = x ~ ifelse(x == 3, style(font.weight = "bold"), style())) ))
方案2:保留整行规则,修正列规则逻辑
如果需要保留整行的样式设置,修改category列的规则,确保值为total时不直接返回原始值,而是通过style传递样式,同时修正属性拼写:
library(tidyverse) library(formattable) df <- data.frame(category=c('a','b','total'),value=c(1,2,3)) formattable(df,list( area(row = 3) ~ formatter("span", style = x ~ style(font.weight = "bold")), category = formatter("span", style = x ~ ifelse(x != 'total', style(color = "red"), style())) ))
这里去掉了category规则中x ~ ifelse(...)的返回值逻辑,让整行的格式化规则能正确应用到total单元格上,同时保留非total值的红色样式。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

