
本文介绍一种轻量级、无需后端的前端方案,通过原生 javascript 实现用户在网页中输入自定义文本,点击按钮后自动将预设代码模板中所有指定占位符(如 `character`)替换为该文本,并实时显示结果。适合非开发人员快速集成到静态网站中。
要实现类似 Episode 模板网站中“输入角色名 → 一键替换全部占位符”的功能,核心在于:捕获用户输入 + 定位模板文本 + 批量安全替换 + 即时渲染。整个过程完全运行在浏览器端,无需服务器参与,部署简单、响应迅速。
✅ 基础实现步骤(三步到位)
准备 HTML 结构
包含一个输入框(<input>)、一个触发按钮(<button>)和一个用于显示替换后代码的容器(如 <pre> 或 <div>)。注意:建议使用 <pre> 保留代码缩进与换行,提升可读性。-
用 JavaScript 绑定交互逻辑
推荐使用 addEventListener(而非内联 onclick),更易维护且符合现代实践。关键点:- 使用 textContent 获取原始模板内容(避免误操作 HTML 标签);
- 使用 String.prototype.replaceAll() 进行全局替换(注意:IE 不支持,但现代浏览器均兼容);
- 对用户输入调用 .toUpperCase() 确保大小写统一(可根据需求改为 .trim() 或其他处理)。
-
增强用户体验的小技巧
- CSS 添加 text-transform: uppercase 让输入框内文字实时大写显示(视觉提示);
- 替换前校验输入是否为空,避免清空占位符;
- 可选:添加 readonly 或 tabindex="-1" 防止意外修改输出区。
? 完整可运行示例
<!-- HTML --> <input type="text" id="inp" placeholder="请输入角色名(如:ALEX)"> <button class="btnChange">生成代码</button> <pre id="output" style="background:#f5f5f5; padding:1rem; border-radius:4px; overflow-x:auto;"> CHARACTER enters from left to screen center. CHARACTER says, "Hello world!" CHARACTER walks toward the horizon. </pre>
/* CSS */
#inp {
padding: 0.5rem;
font-size: 1rem;
text-transform: uppercase;
margin-right: 0.5rem;
}
.btnChange {
padding: 0.5rem 1rem;
background: #2a6496;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.btnChange:hover {
background: #1d4a6e;
}// JavaScript(放在 </body> 前或 DOMContentLoaded 中)
const btnChange = document.querySelector(".btnChange");
const inp = document.querySelector("#inp");
const output = document.querySelector("#output");
const originalContent = output.textContent; // ✅ 预存原始模板,避免多次替换污染
btnChange.addEventListener("click", () => {
const userInput = inp.value.trim();
if (!userInput) {
alert("请输入有效名称!");
return;
}
// 全局替换所有 'CHARACTER'(区分大小写),并保持大写格式
output.textContent = originalContent.replaceAll("CHARACTER", userInput.toUpperCase());
});⚠️ 注意事项与优化建议
- 大小写敏感:replaceAll("CHARACTER", ...) 严格匹配全大写。若需忽略大小写,可用正则 replaceAll(/character/gi, ...),但需确保模板中无歧义。
- 特殊字符转义:若用户可能输入 /、$ 等正则元字符,且你改用正则替换,请先转义——但本例用字符串替换,天然规避该问题。
- 性能考虑:对于超长模板(>10KB),replaceAll 依然高效;如需高亮替换差异,可引入 diff 库,但本场景非必需。
- 可扩展性:如需支持多个占位符(如 SCENE, LOCATION),可封装为映射对象 {"CHARACTER": val1, "SCENE": val2},遍历执行替换。
这套方案零依赖、易理解、易定制,即使没有编程经验,也能按结构复制粘贴到你的 HTML 页面中立即生效——真正让模板工具“开箱即用”。










