代码之家  ›  专栏  ›  技术社区  ›  thothal

编辑闪亮的.tag元素

  •  2
  • thothal  · 技术社区  · 6 年前

    背景

    我想改变 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 语法?

    另一个选择是写我自己的 box 函数,但我想避免代码重复。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MrFlick    6 年前

    xml2

    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"))