使用 Blob 和 URL.createObjectURL (推荐,现代浏览器)
这是目前最推荐、最灵活的方法,它不依赖任何外部服务器,完全在浏览器端完成,用户体验好,且不会因为页面内容过多而导致性能问题。

(图片来源网络,侵删)
核心原理:
- 使用 jQuery 获取你想要导出的 HTML 元素内容,转换成纯文本格式。
- 使用
Blob(Binary Large Object) API 将文本内容包装成一个文件对象。 - 通过
URL.createObjectURL为这个 Blob 对象创建一个临时的下载链接。 - 模拟用户点击这个链接,触发文件下载。
- 释放临时 URL。
完整代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">jQuery 导出 TXT 文件示例</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body { font-family: sans-serif; padding: 20px; }
#content { border: 1px solid #ccc; padding: 15px; margin-bottom: 20px; }
button { padding: 10px 15px; font-size: 16px; cursor: pointer; }
</style>
</head>
<body>
<h1>我的网页内容</h1>
<div id="content">
<h2>这是一个标题</h2>
<p>这是第一段正文内容,它包含了一些 <strong>粗体</strong> 和 <em>斜体</em> 文字。</p>
<p>这是第二段正文内容,下面是一个列表:</p>
<ul>
<li>列表项 1</li>
<li>列表项 2</li>
<li>列表项 3</li>
</ul>
<p>页脚信息 © 2025 我的公司</p>
</div>
<button id="exportBtn">导出为 TXT 文件</button>
<script>
$(document).ready(function() {
// 为导出按钮添加点击事件
$("#exportBtn").on("click", function() {
// 1. 获取要导出的内容
// 使用 .text() 方法可以自动移除所有 HTML 标签,只保留纯文本
const content = $("#content").text();
// 2. 定义文件名
const fileName = "我的网页内容.txt";
// 3. 创建 Blob 对象
// type: 'text/plain' 表示这是一个纯文本文件
// \n 是换行符,确保文本在记事本等编辑器中格式正确
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
// 4. 创建下载链接
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = fileName;
// 5. 模拟点击下载
document.body.appendChild(link); // 必须将元素添加到 DOM 中才能在 Firefox 中生效
link.click();
// 6. 清理:移除临时链接并释放 URL 对象
document.body.removeChild(link);
URL.revokeObjectURL(link.href);
});
});
</script>
</body>
</html>
代码解析
$("#content").text(): 这是关键一步。.text()方法会获取选中元素的所有文本内容,并自动剥离掉所有的 HTML 标签(如<h2>,<p>,<strong>等),非常适合导出纯文本。new Blob([content], { type: 'text/plain;charset=utf-8' }):Blob是 JavaScript 的一个内置对象,表示一个不可变、原始数据的类文件对象。[content]是一个数组,因为我们可能想合并多个数据块,这里我们只有一个文本字符串。{ type: 'text/plain;charset=utf-8' }�定了 Blob 的 MIME 类型。text/plain表示是纯文本,charset=utf-8确保中文字符能被正确编码和保存。
URL.createObjectURL(blob): 这个静态方法会创建一个指向blob参数的 DOMString,这个 URL 的生命周期和创建它的窗口中的document绑定,当文档被卸载时,此 URL 也会被释放,我们可以用它来创建一个临时的下载链接。link.download = fileName: 设置<a>标签的download属性,这个属性会告诉浏览器,这个链接不是用于导航,而是用于下载,并将fileName作为默认的文件名。link.click(): 用 JavaScript 触发<a>标签的点击事件,从而启动文件下载。URL.revokeObjectURL(link.href): 这是一个好习惯,在下载完成后,调用这个方法可以释放之前通过URL.createObjectURL创建的 URL 对象,避免内存泄漏。
使用 data: URI 方案 (简单,但有局限性)
这种方法非常简单,直接使用一个 data: 协议的链接来触发下载。
核心原理:直接编码到 URL 中,然后创建一个指向该 URL 的 download 链接。
代码示例
$("#exportBtn").on("click", function() {
const content = $("#content").text();
const fileName = "我的网页内容.txt";
// 将内容进行 URI 编码,并构建 data: URI
const dataUri = 'data:text/plain;charset=utf-8,' + encodeURIComponent(content);
const link = document.createElement('a');
link.setAttribute('href', dataUri);
link.setAttribute('download', fileName);
link.click();
});
优缺点
- 优点:
- 代码极其简单,无需
Blob。
- 代码极其简单,无需
- 缺点:
- URL 长度限制:
data:URI 有长度限制(不同浏览器限制不同,通常在几 MB 到几十 MB),如果内容很大,URL 会被截断,导致下载失败。 - 兼容性: 虽然现代浏览器都支持,但在一些非常旧的浏览器上可能有问题。
- 可读性差: 生成的 URL 会非常长且难以阅读。
- URL 长度限制:
此方法仅适用于导出非常短小。

(图片来源网络,侵删)
服务器端生成文件 (适用于超长内容或复杂逻辑)
非常巨大(比如整个小说的文本),或者导出逻辑非常复杂(需要查询数据库、进行权限验证等),那么在浏览器端生成可能会导致页面卡顿或失败,这时,最佳方案是让服务器来生成文件。
核心原理:
- 用户点击下载按钮。
- jQuery 发送一个 AJAX 请求到服务器,请求内容可能是要导出的内容的 ID 或查询参数。
- 服务器接收到请求后,从数据库或其他数据源获取数据,生成 TXT 文件。
- 服务器将文件作为响应体返回,并设置正确的
Content-Type和Content-Disposition头部,以触发浏览器的文件下载。
前端 jQuery 代码
$("#exportBtn").on("click", function() {
// 假设我们要导出的内容有唯一的 ID
const contentId = "12345";
$.ajax({
url: '/api/export-txt', // 你的服务器端处理接口
type: 'GET',
data: { id: contentId }, // 将 ID 发送给服务器
xhrFields: {
// 关键:设置 responseType 为 blob,告诉 jQuery 我们期望接收一个二进制文件
responseType: 'blob'
},
success: function(data) {
// data 服务器返回的 Blob 文件对象
const fileName = "从服务器下载的内容.txt";
const link = document.createElement('a');
link.href = URL.createObjectURL(data);
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(link.href);
},
error: function(jqXHR, textStatus, errorThrown) {
alert("下载失败: " + textStatus);
console.error(errorThrown);
}
});
});
后端伪代码 (以 Node.js/Express 为例)
// 在你的服务器路由中
app.get('/api/export-txt', (req, res) => {
const contentId = req.query.id;
// 1. 根据 ID 从数据库获取内容 (这里是伪代码)
// const contentFromDB = db.getContentById(contentId);
// 模拟从数据库获取的内容
const contentFromDB = "这是从数据库获取的、非常长的文本内容...";
// 2. 设置响应头,告诉浏览器这是一个文件下载
res.setHeader('Content-Type', 'text/plain;charset=utf-8');
res.setHeader('Content-Disposition', `attachment; filename="content_${contentId}.txt"`);
// 3. 发送文件内容
res.send(contentFromDB);
});
总结与选择
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 方法一: Blob | 现代标准、灵活、无服务器依赖、无内容长度限制 | 需要现代浏览器支持 | 绝大多数情况下的首选,特别是中小型页面内容的导出。 |
| 方法二: data: | 极其简单 | 有 URL 长度限制、兼容性一般 | 仅导出极短的文本,如一行代码、一个短消息等。 |
| 方法三: 服务器端 | 无浏览器限制、可处理超长内容、可结合复杂业务逻辑 | 需要服务器支持、有网络延迟 | 导出海量数据、需要权限控制或导出逻辑非常复杂的场景。 |
对于绝大多数网页导出 TXT 的需求,强烈推荐使用方法一 (Blob),它简单、高效且可靠。

(图片来源网络,侵删)
