You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

渲染JS与HTML代码模板及输出脚本至页脚的PHP代码处理需求

技术问询:实现适用于JavaScript的HTML模板渲染功能

我需要实现一个可通过JavaScript渲染的HTML模板,用于完成文章标签的添加与管理功能。目前已编写了相关的HTML结构及用于输出模板脚本的PHP代码,具体内容如下:

标签添加功能的HTML结构

<form id="add_post">
  <div id="post-add-tag">
    <div class="input-group">
      <input type="text" id="post_tags" name="post_tags" />
      <span class="input-group-btn">
        <button id="add_tag_button" type="submit">Add</button>
      </span>
    </div>
    <ul id="tags_list"></ul>
  </div>
</form>

用于将模板脚本输出到页脚的PHP函数

function post_tag_template(){
?>
<script type="text/template" id="the_template">
  <li><%= tag %><button class="remove-tag">×</button></li>
</script>
<?php
}
add_action('wp_footer', 'post_tag_template');

实现方案说明

我来给你梳理下怎么完成这个JavaScript模板渲染的功能,这里的模板用了类似Underscore.js的模板语法(<%= %>),下面提供两种可行的实现方式:

方式一:基于Underscore.js实现(推荐)

如果你使用的是WordPress环境,可以先在主题的functions.php中引入依赖脚本:

function enqueue_tag_template_scripts() {
    // 引入Underscore库
    wp_enqueue_script('underscore');
    // 引入自定义的标签处理脚本
    wp_enqueue_script('tag-handler', get_template_directory_uri() . '/js/tag-handler.js', array('jquery', 'underscore'), '', true);
}
add_action('wp_enqueue_scripts', 'enqueue_tag_template_scripts');

然后在tag-handler.js中编写核心逻辑:

jQuery(document).ready(function($) {
    // 编译模板
    var tagTemplate = _.template($('#the_template').html());

    // 监听添加标签的表单提交事件
    $('#add_post').on('submit', function(e) {
        e.preventDefault();
        var tagInput = $('#post_tags');
        var tagText = tagInput.val().trim();
        
        if (tagText) {
            // 渲染模板并追加到标签列表
            var tagItemHtml = tagTemplate({ tag: tagText });
            $('#tags_list').append(tagItemHtml);
            // 清空输入框
            tagInput.val('');
        }
    });

    // 监听标签删除按钮的点击事件
    $('#tags_list').on('click', '.remove-tag', function() {
        $(this).parent('li').remove();
    });
});

方式二:自定义简单模板解析函数(无需额外依赖)

如果不想引入Underscore库,可以自己实现一个轻量的模板解析函数:

// 自定义模板解析函数
function parseSimpleTemplate(templateStr, data) {
    return templateStr.replace(/<%= (\w+) %>/g, function(match, key) {
        return data[key] || '';
    });
}

jQuery(document).ready(function($) {
    // 获取并预编译模板
    var templateStr = $('#the_template').html();
    var tagTemplate = function(data) {
        return parseSimpleTemplate(templateStr, data);
    };

    // 以下逻辑和方式一一致
    $('#add_post').on('submit', function(e) {
        e.preventDefault();
        var tagInput = $('#post_tags');
        var tagText = tagInput.val().trim();
        
        if (tagText) {
            var tagItemHtml = tagTemplate({ tag: tagText });
            $('#tags_list').append(tagItemHtml);
            tagInput.val('');
        }
    });

    $('#tags_list').on('click', '.remove-tag', function() {
        $(this).parent('li').remove();
    });
});

两种方式都能实现输入标签内容、点击Add按钮渲染模板添加标签项,以及点击删除按钮移除对应标签的功能。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:28:25