基本
インストール
npm install htmx.org
動作の仕組み
HTML-drivenHTML 属性から AJAX を発行、JS 不要
Swap contentサーバーが HTML フラグメントを返し、htmx がそれを差し込む
Progressive標準 HTML を拡張;グレースフルデグラデーション対応
REST-friendly任意のサーバーサイドフレームワークで動作
属性
コアリクエスト属性
hx-get="/url"URL へ GET リクエストを発行
hx-post="/url"URL へ POST リクエストを発行
hx-put="/url"URL へ PUT リクエストを発行
hx-patch="/url"URL へ PATCH リクエストを発行
hx-delete="/url"URL へ DELETE リクエストを発行
動作属性
hx-triggerリクエストを起動するイベント
hx-targetコンテンツを差し込む対象要素
hx-swapレスポンスコンテンツの差し込み方法
hx-selectレスポンス HTML の一部を選択
hx-valsリクエストに追加の値を付加
hx-confirmリクエスト前に確認ダイアログを表示
hx-disable要素の htmx 処理を無効化
トリガー
トリガー構文
Feed
トリガー修飾子
changed値が変化した場合のみ発火
delay:Ns発火前に N 秒待機
throttle:NmsN ミリ秒に1回にスロットル
once最初の1回のみトリガー
from:selector別の要素でイベントをリッスン
every NsN 秒ごとにポーリング
load要素ロード時に発火
revealed要素がスクロールで表示されたときに発火
ターゲット
ターゲット選択
ターゲットキーワード
this要素自身(デフォルト)
closest <sel>セレクターにマッチする最も近い祖先
find <sel>セレクターにマッチする最初の子孫
next <sel>セレクターにマッチする次の兄弟
previous <sel>セレクターにマッチする前の兄弟
スワップ
スワップ戦略
innerHTML内部コンテンツを置換(デフォルト)
outerHTML対象要素全体を置換
afterbegin対象の内側の先頭に挿入
beforeend対象の内側の末尾に追加
beforebegin対象の前に挿入
afterend対象の後に挿入
delete対象要素を削除
noneスワップなし、イベントのみ発火
スワップ修飾子
ヘッダー
リクエストヘッダー(htmx が送信)
HX-Requesthtmx リクエストの場合は常に "true"
HX-Target対象要素の ID
HX-Triggerトリガーされた要素の ID
HX-Trigger-Nameトリガーされた要素の name 属性
HX-Current-URLブラウザの現在の URL
HX-Prompthx-prompt へのユーザー入力
レスポンスヘッダー(サーバーが送信)
HX-Redirectクライアントサイドで URL にリダイレクト
HX-Refresh"true" の場合にページ全体をリフレッシュ
HX-RetargetCSS セレクターで hx-target をオーバーライド
HX-Reswaphx-swap 戦略をオーバーライド
HX-Triggerクライアントサイドのイベントをトリガー
HX-Push-Urlブラウザ履歴に URL をプッシュ
イベント
ライフサイクルイベント
htmx:configRequestリクエスト前;パラメーターやヘッダーを変更可能
htmx:beforeRequestAJAX 呼び出し直前
htmx:afterRequestリクエスト完了後
htmx:beforeSwapコンテンツ差し込み前
htmx:afterSwapコンテンツ差し込み後
htmx:afterSettleスワップによる DOM 安定化後
htmx:responseErrorサーバーがエラーステータスを返した
イベントのリッスン
document.body.addEventListener("htmx:afterSwap", (e) => { console.log("Swapped:", e.detail.target); }); // Cancel a request document.body.addEventListener("htmx:configRequest", (e) => { if (!confirm("Proceed?")) e.preventDefault(); });
拡張
拡張の使用
主な拡張
json-encリクエストボディを JSON としてエンコード
loading-statesローディング状態の CSS クラスを管理
head-supportレスポンスの タグをマージ
preloadマウスダウン / ホバー時にリンクをプリロード
sseサーバー送信イベント(SSE)のサポート
wsWebSocket のサポート
response-targetsエラーレスポンス用に別のターゲットを指定
インジケーター
ローディングインジケーター
Loading...
インジケーター CSS
.htmx-indicator { display: none; } .htmx-request .htmx-indicator { display: inline; } .htmx-request.htmx-indicator { display: inline; }

htmx はリクエスト中に要素へ htmx-request クラスを付与する

リクエスト中に無効化

hx-disabled-elt はリクエスト中に disabled 属性を付与する

よく使うパターン
アクティブサーチ
#results" />
無限スクロール
Loading more...
確認付き削除
インライン編集
Click to edit this text