如何解决DT :: formatStyle基于带有原始HTML的字符向量设置数据表行的背景色
我试图基于带有原始HTML的矢量设置数据表行的背景颜色(我不进行转义,以使其呈现上标)。在这一点上,我可以做一个或另一个:通过转义HTML正确设置背景颜色,或通过不转义HTML正确设置上标,但不能同时设置两者。
我们可以结合使用DT::formatStyle
和DT::styleEqual
来基于表中的变量设置数据表特定行的背景色;例如,在V1 == 'Crackers'
时将背景设置为灰色:
library(DT)
df <- data.frame(
V1 = c('Cheese<sup>1</sup>','Crackers','Taters'),v2 = c(10,4,7))
datatable(df,escape = FALSE) %>%
formatStyle('V1',target = 'row',backgroundColor = styleEqual(
levels = 'Crackers',values = 'gray'))
我想做的是设置特定行的背景颜色,该行的V1
值包含一个非转义的HTML上标(即Cheese<sup>1</sup>
)。请注意,我们将escape = FALSE
设置为正确呈现上标。将levels
的{{1}}参数设置为该包含HTML的字段无效:
styleEqual
问题可能是datatable(df,backgroundColor = styleEqual(
levels = c('Cheese<sup>1</sup>','Crackers'),values = c('gray','gray')))
在styleEqual
参数上调用htmltools::htmlEscape
,即
levels
显然不会与htmltools::htmlEscape('Cheese<sup>1</sup>')
[1] "Cheese<sup>1</sup>"
直接匹配。
如果我们恢复为默认的Cheese<sup>1</sup>
设置,即escape
,那么我们将获得正确的背景色,但是上标当然不起作用。
我找到了一种解决方法,其中涉及修改datatable(df,escape = TRUE) %>% ...
函数,添加一个额外的参数styleEqual
,该参数允许我们跳过对escape
的调用。例如,
htmlEscape
有没有一种更好的方法,而无需修改源代码?
解决方法
有趣的问题。我发现了一个窍门:levels
参数使用列表而不是字符向量。
datatable(df,escape = FALSE) %>%
formatStyle('V1',target = 'row',backgroundColor = styleEqual(
levels = list('Cheese<sup>1</sup>','Crackers'),values = c('gray','gray')))
通过这种方式,is.character(levels)
和is.factor(levels)
都是FALSE
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。