在一个出色的应用程序的上下文中,我试图将某些调用抛出的警告显示为HTML列表。
多亏了this answer,我可以得到所有的警告作为一个字符向量,现在我实际上正在构建HTML。
我能想到的最简单的方法是下面的代码:
warns = c("warning 1", "warning 2", "warning 3", "warning 4")
paste0("<ul><li>", paste0(warns, collapse = "</li><li>"), "</li></ul>") %>% HTML在shiny::renderUI内部,这段代码输出良好,但不是很干净,即使经过彻底测试,我仍然发现它在某种程度上容易出错。
因此,我想使用htmltools包来构建列表,因为这似乎是使用R编写HTML时推荐的方式。
但是,tags$li只能处理字符串,而不能处理字符向量,而且tags$ul使用省略号而不是列表或向量,所以即使使用循环,我也无法构建列表。
使用htmltools构建超文本标记语言列表的最佳方法是什么
发布于 2020-05-10 21:38:15
有几种方法可以构建这个列表。根据应用程序的目的以及是否要运行控制HTML标记的附加逻辑,可以使用元素ul$children的children属性编写列表项,也可以一次性运行它。
子元素的标记可以使用基本的apply函数来完成(例如,lapply可能是更好的选择,因为您希望返回一个闪亮的标记对象)。或者,purrr包很好,而且速度更快一些。但是,如果要呈现数百个元素,我会考虑预先生成标记。
使用...$children方法。下面是如何生成html的方法。
library(htmltools)
warns <- c("warning 1", "warning 2", "warning 3", "warning 4")
ul <- tags$ul()
ul$children <- lapply(seq_len(length(warns)), function(index) {
tags$li(warns[index])
})如果你想在一次运行中生成标记,你可以这样做。
library(htmltools)
warns <- c("warning 1", "warning 2", "warning 3", "warning 4")
ul <- tags$ul(
lapply(seq_len(length(warns)), function(index) {
tags$li(warns[index])
})
)编辑:我忘记使用purrr包添加示例
# using ul$children
warns <- c("warning 1", "warning 2", "warning 3", "warning 4")
ul <- tags$ul()
ul$children <- purrr::map(warns, function(.x) tags$li(.x))
# generating everything at once
warns <- c("warning 1", "warning 2", "warning 3", "warning 4")
ul <- tags$ul(
purrr::map(warns, function(.x) tags$li(.x))
)https://stackoverflow.com/questions/61711777
复制相似问题