2.6 Modern {htmltools}

  • This section requires a basic understanding of CSS selectors, therefore, let’s start with a demo.

  • As of htmltools 0.5.2, the tagQuery function allows for more efficient and readable manipulation of HTML elements, using a syntax similar to jQuery.

  • Two ways to modify a span which is a third child:

    spans <- div(div(p(), map(1:5, \(i) span(i))))
    spans$children[[1]]$children[[2]][[3]]$attribs$class <- "test" 
    
    spans
    <div>
      <div>
        <p></p>
        <span>1</span>
        <span>2</span>
        <span class="test">3</span>
        <span>4</span>
        <span>5</span>
      </div>
    </div>
    spans <- div(div(p(), map(1:5, \(i) span(i))))
    spans <- tagQuery(spans)$
      find("span")$
      filter(\(x, i) i == 3)$
      addAttrs("class" = "amazing-tag")$
      allTags()
    
    spans
    <div>
      <div>
        <p></p>
        <span>1</span>
        <span>2</span>
        <span class="amazing-tag">3</span>
        <span>4</span>
        <span>5</span>
      </div>
    </div>
  • The biggest advantage is that is does not always depend on the overall tag structure:

    spans <- div(div(p(), div(map(1:5, \(i) span(i)))))
    spans <- tagQuery(spans)$
      find("span")$
      filter(\(x, i) i == 3)$
      addAttrs("class" = "amazing-tag")$
      allTags()
    
    spans
    <div>
      <div>
        <p></p>
        <div>
          <span>1</span>
          <span>2</span>
          <span class="amazing-tag">3</span>
          <span>4</span>
          <span>5</span>
        </div>
      </div>
    </div>