
本文介绍一种轻量级、无需后端的前端方案,帮助非编程人员快速为模板代码添加“关键词动态替换”功能:用户输入新词,点击按钮即可批量替换模板中所有指定关键词(如 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 为你自己的占位符,并更新
中的模板文本,即可上线使用。






























