mozilla
Your Search Results

    <template>

    Summary

    The HTML template element <template> is a mechanism for holding client-side content that is not to be rendered when a page is loaded but may subsequently be instantiated during runtime using JavaScript. 

    Think of a template as a content fragment that is being stored for subsequent use in the document. The parser does process the content of the <template> element during the page load to ensure that it is valid, however.

    Attributes

    This element includes the global attributes.

    There is also a content attribute, which is read-only. It provides access to the contents of the template. The existence of the content attribute is often used as a way of determining if a particular browser supports the <template> element.

    Examples

    First we start with the HTML portion of the example.

    <table id="producttable">
      <thead>
        <tr>
          <td>UPC_Code</td>
          <td>Product_Name</td>
        </tr>
      </thead>
      <tbody>
        <!-- existing data could optionally be included here -->
      </tbody>
    </table>
    
    <template id="productrow">
      <tr>
        <td class="record"></td>
        <td></td>
      </tr>
    </template> 
    

    Then we see the JavaScript portion of the example, which can be used to instantiate the HTML.

    // Test to see if the browser supports the HTML template element by checking
    // for the presence of the template element's content attribute.
    if ('content' in document.createElement('template')) {
    
      // Instantiate the table with the existing HTML tbody and the row with the template
      var t = document.querySelector('#productrow'),
      td = t.content.querySelectorAll("td");
      td[0].textContent = "1235646565";
      td[1].textContent = "Stuff";
    
      // Clone the new row and insert it into the table
      var tb = document.getElementsByTagName("tbody");
      var clone = document.importNode(t.content, true);
      tb[0].appendChild(clone);
      
      // Create a new row
      td[0].textContent = "0384928528";
      td[1].textContent = "Acme Kidney Beans";
    
      // Clone the new row and insert it into the table
      var clone2 = document.importNode(t.content, true);
      tb[0].appendChild(clone2);
    
    } else {
      // Find another way to add the rows to the table because 
      // the HTML template element is not supported.
    }
    

    The result is the original HTML table, with two new rows appended to it via JavaScript.

    You can see a live example here (code is displayed here).

    Specifications

    Specification Status Comment
    WHATWG HTML Living Standard
    The definition of 'template element' in that specification.
    Living Standard No change
    HTML5
    The definition of 'template element' in that specification.
    Recommendation Initial definition

    Browser compatibility

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
    Basic support 26 22 (22) Not supported 15 7.1
    Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
    Basic support ? ? ? ? iOS 8

    See also

    Document Tags and Contributors

    Last updated by: markg,