js使用text/template制作模板

33 篇文章 0 订阅

如果你想把模板内容放在HTML文件中,并通过JavaScript加载和渲染这些模板,你可以采用以下几种方法:

1. 使用 <script> 标签作为模板容器

可以使用 <script> 标签来存储模板内容,并设置 type 属性为一个特殊的值(如 text/template),这样浏览器就不会尝试执行这些脚本。

<script id="myTemplate" type="text/template">
    <div>
        <h1>{{title}}</h1>
        <p>{{content}}</p>
    </div>
</script>

然后在JavaScript中获取这个模板的内容:

function loadTemplate(id) {
    return document.getElementById(id).innerHTML;
}

const template = loadTemplate('myTemplate');

2. 使用外部文件

你也可以将模板保存在一个单独的HTML文件中,然后通过Ajax请求加载它。

<!-- index.html -->
<button onclick="loadAndRender()">Load Template</button>

<script>
async function loadAndRender() {
    const response = await fetch('template.html');
    const template = await response.text();
    
    // 假设我们有一个数据对象
    const data = {
        title: 'Welcome',
        content: 'This is some content.'
    };

    const rendered = renderTemplate(template, data);
    document.body.appendChild(createElementFromHTML(rendered));
}

function renderTemplate(template, data) {
    const regex = /\{\{(.+?)\}\}/g;
    return template.replace(regex, (match, expression) => {
        try {
            return eval(expression);
        } catch (e) {
            return '';
        }
    });
}

function createElementFromHTML(htmlString) {
    const div = document.createElement('div');
    div.innerHTML = htmlString.trim();
    return div.firstChild;
}
</script>

示例代码

这里是一个完整的示例,使用了 <script> 标签来存储模板,并且在JavaScript中进行加载和渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Template Engine Example</title>
</head>
<body>
    <button onclick="loadAndRender()">Load Template</button>
    <script id="myTemplate" type="text/template">
        <div>
            <h1>{{title}}</h1>
            <p>{{content}}</p>
        </div>
    </script>
    <script>
        function loadTemplate(id) {
            return document.getElementById(id).innerHTML;
        }

        function renderTemplate(template, data) {
            const regex = /\{\{(.+?)\}\}/g;
            return template.replace(regex, (match, expression) => {
                try {
                    return data[expression];
                } catch (e) {
                    return '';
                }
            });
        }

        function createElementFromHTML(htmlString) {
            const div = document.createElement('div');
            div.innerHTML = htmlString.trim();
            return div.firstChild;
        }

        function loadAndRender() {
            const template = loadTemplate('myTemplate');
            const data = {
                title: 'Welcome to our site!',
                content: 'This is the main content of the page.'
            };
            const rendered = renderTemplate(template, data);
            document.body.appendChild(createElementFromHTML(rendered));
        }
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值