如何不对R中的HTML值属性(带空格)进行硬编码



下面是这个例子。我在R中有一个函数,它生成一些CSS代码。

CSS <- function(values, colors){
template <- "
.option[data-value=%s], .item[data-value=%s]{
background: %s !important;
color: white !important;
}"
paste0(
apply(cbind(values, colors), 1, function(vc){
sprintf(template, vc[1], vc[1], vc[2])
}),
collapse = "n"
)
}

例如,CSS(c("a","b","c"), c("red", "green", "blue"))生成

.option[data-value=a], .item[data-value=a]{
background: red !important;
color: white !important;
}
.option[data-value=b], .item[data-value=b]{
background: green !important;
color: white !important;
}
.option[data-value=c], .item[data-value=c]{
background: blue !important;
color: white !important;
}

但是,如果我的值是c("a 1","b 2","c 3 3")

并且我执行CSS(c("a 1","b 2","c 3 3"), c("red", "green", "blue"))——CSS对于字符向量中的每个字符不识别每个元素之间的空间。因此"a 1"不被识别,它被读取为"a",而"b 2"被读取为"b"等等。

我知道我需要用引号括住每个字符,否则空格将变成属性分隔符,空格后面的所有字符都将被视为元素属性。但是,在不必硬编码的情况下,如何在上面的函数中做到这一点呢?

尝试

template <- "
.option[data-value='%s'], .item[data-value='%s']{
background: %s !important;
color: white !important;
}"

最新更新