1. 什么是 htmx?
htmx 是一个轻量级的开源 JavaScript 库,它允许你直接通过 HTML 属性(如 hx-get
、hx-post
等)来实现 AJAX 请求、CSS 过渡、WebSocket、Server-Sent Events 等功能。换句话说,它让 HTML 本身就能拥有现代前端的动态交互能力,而无需额外编写复杂的 JavaScript。
特点:
为什么选择 htmx?
突破 HTML 的限制默认情况下,只有 <a>
和 <form>
标签能触发 HTTP 请求,而且会导致整个页面刷新。htmx 通过扩展属性让任意元素都能触发各种 HTTP 请求,并能精确更新页面局部。
开发更简单交互逻辑通过 HTML 属性配置,无需复杂的 JavaScript,保持代码简洁、直观。
后端驱动服务器返回 HTML 片段即可直接插入页面,不需要 JSON + 前端模板解析,后端渲染即“即插即用”。
2. 快速入门
引入 htmx
在 HTML 中加入以下脚本即可(以 2.0.6 版本为例):
<script src="https://cdn.jsdelivr.net/npm/htmx.org@2.0.6/dist/htmx.min.js"></script>
示例:点击按钮
<button hx-post="/clicked" hx-swap="outerHTML">
Click Me
</button>
如果服务器返回:
<button>Clicked!</button>
页面按钮会变成 “Clicked!”。
3. 常见属性
以下是 htmx 的核心属性(来自官方文档):
属性 | 说明 |
---|
hx-get / hx-post / hx-put / hx-patch / hx-delete | 发送指定 HTTP 方法请求 |
hx-trigger | 指定触发请求的事件(如 click 、change 、keyup 等) |
hx-target | 指定响应内容要插入的目标元素 |
hx-swap | 定义内容替换方式,如 innerHTML 、outerHTML 、beforeend 等 |
hx-select | 从响应 HTML 中选择部分内容插入 |
hx-swap-oob | 支持“带外”更新(OOB swaps),允许更新页面上其他位置的元素 |
htmx.config.* | 全局配置(跨域凭证、默认 swap 行为等) |
4. 高级功能
除了基础 AJAX,htmx 还支持许多实用场景:
无刷新表单提交:hx-post
+ hx-swap
延迟加载 / 无限滚动:hx-trigger="revealed"
实现滚动到底部时加载
内联编辑(Inline Editing):点击后替换为输入框,提交保存
文件上传、进度条、模态对话框 等 UI 交互
实时更新:支持 Server-Sent Events (SSE) 和 WebSocket
完整示例可查看 htmx 官方 Examples(https://htmx.org/examples/)。
5. 实战:留言板(Node.js + htmx)
项目结构
/
├─ public/
│ └─ index.html
└─ server.js
server.js
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
let posts = [];
app.get('/', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
app.get('/posts', (req, res) => {
res.send(posts.map(p => `<div class="post">${p}</div>`).join(''));
});
app.post('/post', (req, res) => {
const { message } = req.body;
posts.push(message);
res.send(`<div class="post">${message}</div>`);
});
app.listen(3333, () => console.log('Server started on port 3333'));
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTMX 留言板</title>
<script src="https://cdn.jsdelivr.net/npm/htmx.org@2.0.6/dist/htmx.min.js"></script>
</head>
<body>
<h1>留言板</h1>
<form hx-post="/post" hx-target="#posts" hx-swap="beforeend">
<input type="text" name="message" placeholder="输入留言..." required>
<button type="submit">提交</button>
</form>
<div id="posts" hx-get="/posts" hx-trigger="load"></div>
</body>
</html>
功能说明
整个过程无需任何额外的前端 JavaScript。
6. 总结与应用场景
优点
适用场景
注意事项
总结
htmx 让 HTML 本身具备“超能力”: 无需大量 JavaScript,仅靠属性配置和后端渲染,就能实现 AJAX、动画、实时更新等功能。
对于 传统 SSR 项目 或 追求简洁开发体验的场景,htmx 都是一个极具吸引力的选择。
阅读原文:原文链接
该文章在 2025/9/3 10:10:02 编辑过