DEV Community

Dhruv Raval
Dhruv Raval

Posted on • Originally published at dhruvraval.dev on

Leveraging the Power of the <template> Tag in HTML for Dynamic Content Creation

HTML, the backbone of the web, has evolved over the years to accommodate modern web development needs. The <template> tag allows developers to define HTML content that can be easily cloned and used dynamically, enabling the creation of reusable components. In this article, we will explore the benefits of using the <template> tag, illustrated through an example.

Consider the following <template> tag example:

<template id='optionsRowTemplate'>
    <tr>
        <td>
            <input type="text" class="form-control" data-input="english" required>
        </td>
        <td>
            <input type="text" class="form-control" data-input="hindi" required>
        </td>
        <td>
            <input type="checkbox" class="form-control ckb-unset" data-input="is_ans">
        </td>
        <td>
            <a href="javascript:void(0)" class="remove_button remove_option" title="Remove option">
                <img src="<?php echo base_url(); ?>/public/images/remove-icon.png" alt="Remove">
            </a>
        </td>
    </tr>
</template>
Enter fullscreen mode Exit fullscreen mode

Script:

let option_temp_id = 1;
$("#add_options").click(function () {
        var new_temp_id = 'new-' + option_temp_id;
        createOptionRow(new_temp_id);
        option_temp_id++;
})

function createOptionRow(id, option_en = '', option_hi = '', is_ans = false) {

    const tbody = document.querySelector("#optionsTbody");
    const template = document.querySelector("#optionsRowTemplate");

    // Clone the new row and insert it into the table
    const clone = template.content.cloneNode(true);

    let option_row = clone.querySelector('tr');
    let input_en = clone.querySelector('[data-input="english"]');
    let input_hi = clone.querySelector('[data-input="hindi"]');
    let input_is_ans = clone.querySelector('[data-input="is_ans"]');

    option_row.dataset.optionId = id;

    input_en.name = `options[${id}][option_en]`;
    input_en.value = option_en;

    input_hi.name = `options[${id}][option_hi]`;
    input_hi.value = option_hi;

    input_is_ans.name = `options[${id}][correct_ans]`;
    input_is_ans.checked = is_ans;

    tbody.appendChild(clone);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we have a template for an options row in a multi-language quiz application. Each row contains an input field for the English and Hindi translations of an option, a checkbox to mark it as the correct answer, and a remove button to delete the option.

Now, let's delve into the benefits of using the <template> tag:

1. Reusability: The primary advantage of using <template> is reusability. Instead of hard-coding the entire row structure in your JavaScript whenever you need to add a new option dynamically, you can simply clone the template and modify its contents. This reduces redundancy and keeps your code clean and maintainable.

2. Performance: By creating the template beforehand and cloning it, you eliminate the need for repetitive DOM manipulation when adding new options. This leads to improved performance as you're working with lightweight clones instead of constructing elements from scratch every time.

3. Readability and Maintainability: With the template clearly defined in the HTML section, your JavaScript code becomes more readable, focusing on the dynamic aspects rather than constructing HTML elements. Additionally, any changes to the template are reflected instantly across all instances where it is used, making maintenance more straightforward.

4. Data Binding: The template can be customized dynamically by binding data to its elements. In the provided example, the createOptionRow() function takes in data (option_en, option_hi, and is_ans) and populates the cloned template accordingly. This enables data-driven websites, where content can be updated dynamically based on user inputs or fetched data.

5. Separation of Concerns: Using <template> promotes the separation of concerns between HTML structure and JavaScript logic. Designers can focus on the HTML template, while developers handle the dynamic behavior. This division of labor enhances collaboration and streamlines the development process.

In conclusion, the <template> tag in HTML is a powerful tool for creating reusable, dynamic content, contributing to better performance, maintainability, and readability of your code. By leveraging the benefits of the <template> tag, you can enhance the interactivity and user experience of your web applications.

So, the next time you find yourself needing to create dynamic elements, consider using the <template> tag to unlock its full potential and simplify your development process. Happy coding!

Remember to include the necessary JavaScript libraries, such as jQuery, if you plan to use the provided example code in your project.

Top comments (0)