
本文介绍一种轻量级、无需后端的前端方案,帮助非编程人员快速为模板代码添加“关键词动态替换”功能:用户输入新词,点击按钮即可批量替换模板中所有指定关键词(如 character),并实时显示结果。
本文介绍一种轻量级、无需后端的前端方案,帮助非编程人员快速为模板代码添加“关键词动态替换”功能:用户输入新词,点击按钮即可批量替换模板中所有指定关键词(如 character),并实时显示结果。
在为 Episode 等互动小说平台提供可复用的脚本模板时,常需让用户将占位符(如 CHARACTER、LOCATION 或 SCENE_TITLE)替换成自己的内容。手动使用 Ctrl+F 替换不仅易出错,还降低用户体验。通过纯前端 JavaScript 即可轻松实现一键智能替换——无需服务器、不依赖框架,兼容所有现代浏览器。
核心实现逻辑
整个功能基于三步操作:
- 获取原始模板文本(静态存储在页面中);
- 监听用户输入与按钮点击事件(推荐使用 addEventListener,比内联 onclick 更规范、易维护);
- 执行全局、大小写敏感的字符串替换,并将结果实时渲染到目标区域。
以下是一个完整、开箱即用的示例代码:
<!-- HTML 结构 --> <input type="text" id="inp" placeholder="请输入要替换的词(如:莉亚)"> <button class="btnChange">生成定制代码</button> <pre class="brush:php;toolbar:false;" id="output" style="background:#f5f5f5; padding:12px; border-radius:4px; overflow-x:auto;"> CHARACTER enters from left to screen center. CHARACTER says, "This is my story." The camera follows CHARACTER closely.
/* CSS:自动转为大写(提升一致性,可选) */
#inp {
text-transform: uppercase;
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 4px;
margin-right: 8px;
}
.btnChange {
padding: 8px 16px;
background: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.btnChange:hover {
background: #45a049;
}// JavaScript:核心替换逻辑
const btnChange = document.querySelector(".btnChange");
const inp = document.querySelector("#inp");
const output = document.querySelector("#output");
const originalContent = output.textContent; // ✅ 静态读取初始模板,避免重复获取
btnChange.addEventListener("click", () => {
const replacement = inp.value.trim();
if (!replacement) {
alert("请输入有效内容!");
return;
}
// 使用 replaceAll 实现全量替换(注意:IE 不支持,如需兼容旧版可用 split+join 替代)
output.textContent = originalContent.replaceAll("CHARACTER", replacement);
});关键注意事项
- ✅ 区分大小写:replaceAll("CHARACTER", replacement) 严格匹配大写形式。若需忽略大小写,可改用正则表达式(例如 originalContent.replace(/character/gi, replacement)),但需确保语义合理(如 Character 和 character 是否应被同等替换)。
- ✅ 防空输入:添加 trim() 与空值校验,避免误替换为空字符串导致代码损坏。
- ✅ 保留格式:使用
标签包裹输出区域,可原样保留缩进与换行;若需高亮语法,后续可集成 highlight.js 等轻量库。 </li><li>⚠️ <strong>安全性提醒</strong>:此方案仅用于静态模板替换,<strong>不执行、不解析、不渲染用户输入内容</strong>,因此无 XSS 风险;切勿将用户输入直接插入 innerHTML 或 eval() 中。 </li><li>? <strong>扩展建议</strong>:如需支持多关键词替换(如同时替换 CHARACTER、LOCATION、TIME),可设计多个输入框 + 对象映射,例如:<pre class="brush:php;toolbar:false;">const replacements = { CHARACTER: inp1.value, LOCATION: inp2.value }; let result = originalContent; Object.entries(replacements).forEach(([key, val]) => { result = result.replaceAll(key, val); }); output.textContent = result;
该方案简洁可靠,几分钟即可集成到任意静态网站中,特别适合创作者、教育者或模板分发者提升用户自助效率。只需复制粘贴上述代码片段,修改 CHARACTER 为你自己的占位符,并更新
中的模板文本,即可上线使用。










