背景
我想改变 a 的一些元素shinydashboard::box
。比如说,我想更改用于折叠的图标box(collapsible = TRUE)
。查看输出,我需要做的就是更改<i>
相应地标记:
(b <- box(collapsible = T))
# <div class="col-sm-6">
# <div class="box">
# <div class="box-header">
# <div class="box-tools pull-right">
# <button class="btn btn-box-tool" data-widget="collapse">
# <i class="fa fa-minus"></i> ## change to <i class="fa fa-times">
# </button>
# </div>
# </div>
# <div class="box-body"></div>
# </div>
# </div>
挑战
虽然我可以做一些递归循环b$children
找到正确的子元素,例如
b$children[[1]]$children[[1]]$children[[2]]$children[[1]]$children[[1]]$attribs$class <- "fa fa-times"
我想知道是否有更简单的方法?理想情况下类似jQuery
syntax?
另一种选择是自己编写box
函数,但我想避免代码重复。
您可以编写一个辅助函数来编辑生成的 HTML。我们可以使用以下函数xml2
解析和编辑 html。例如
swap_node <- function(x, xpath, newval) {
parsed <- xml2::read_html(as.character(x))
oldnode <- xml2::xml_find_all(parsed, xpath)
newnode <- xml2::read_html(as.character(newval))
xml2::xml_replace(oldnode, newnode)
shiny::HTML(as.character(xml2::xml_find_first(parsed, "//body/*")))
}
然后你可以像这样使用它
b <- shinydashboard::box(collapsible = T)
swap_node(b, "//i", shiny::tags$i(class="fa fa-times"))
但这是在字符串世界而不是对象世界中进行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)