本文介绍一种可扩展、免重复编码的 jquery 方案:通过为按钮添加 data 属性绑定文件路径,复用一个通用加载函数,实现点击任意按钮即异步读取对应 `.txt` 文件、淡入淡出切换显示内容,完美支持数百个独立文本资源。
要构建一个支持 300+ 个独立文本内容按需加载的“公证式”交互界面,核心在于解耦按钮行为与文件路径——避免为每个按钮写单独函数或硬编码 onclick="Answer('xxx.txt')",更不应在 JS 中维护冗余的 URL 列表或条件分支。
✅ 推荐做法是:*利用 HTML5 `data-` 自定义属性存储文件路径,并通过事件委托统一处理所有按钮点击**。这样既保持 HTML 清洁可维护,又让 JavaScript 高度复用、零重复。
HTML(简洁可扩展,新增按钮只需一行):
Click Any Question Button
jQuery(单次定义,全局生效):
$(document).ready(function() {
// 使用事件委托监听所有 .button 点击(支持动态添加)
$(document).on('click', '.button', function(e) {
e.preventDefault();
const fileName = $(this).data('file'); // 安全获取 data-file 值
// 防止空路径或未定义
if (!fileName || typeof fileName !== 'string') {
console.warn('Missing or invalid data-file attribute');
return;
}
// 执行带过渡的加载:先淡出 → 更新文本 → 淡入
$('.answerBox')
.fadeOut(300, function() {
// 淡出完成后发起请求,避免闪烁
$.get(fileName)
.done(function(text) {
$(this).text($.trim(text)); // 自动去除首尾空白,提升健壮性
})
.fail(function() {
$(this).text('❌ Failed to load: ' + fileName);
})
.always(function() {
$(this).fadeIn(400);
});
});
});
});此方案将原本 O(n) 的代码膨胀问题,降维为 O(1) 的优雅实现——你只需专注内容组织,jQuery 自动完成一切调度。