083. Extended Selectors(拡張セレクタ:自分の「家族」や「近くの人」を魔法の言葉で選ぶ)
原理:HTMXだけの「特別な呼び名」
「近くのあいつ」をスマートに指さす
これまでのCSSセレクタ(#idや.class)は、たとえるなら「住所」で人を探す方法でした。しかし、私たちが日常で会話するとき、もっと便利な呼び方を使いますよね? 「私の親に伝えて」「隣の部屋の人を呼んで」「自分自身を変えたい」
HTMXには、通常のCSSにはない、ターゲットをより直感的に指定するための「拡張セレクタ(Extended Selectors)」という特別な言葉が用意されています。これを使えば、複雑なIDを付ける手間を省き、コードを驚くほど短く、美しく保つことができます。
実践:魔法のキーワードでターゲットを射抜く
1. 「自分自身」をターゲットにする(this)
HTMXで最もよく使われる魔法の言葉、それが this です。
<!--
hx-target="this" : クリックしたボタン自体を更新のターゲットにします。
-->
<button hx-get="/api/clicked" hx-target="this" hx-swap="outerHTML">
ここを押してね
</button>
2. 「一番近い親」を探す(closest)
リストの一部を更新するときに絶大な威力を発揮するのが closest です。
<tr class="item-row">
<td>商品名</td>
<td>
<!--
hx-target="closest .item-row" :
自分から「上」に遡って、最初に見つかる .item-row をターゲットにします。
これなら、何行あっても同じコードが使い回せます!
-->
<button hx-delete="/item/1" hx-target="closest .item-row">
削除
</button>
</td>
</tr>
3. その他の便利な仲間たち
next ◯◯: 自分の「次(下)」にある最初の ◯◯ を探す。previous ◯◯: 自分の「前(上)」にある最初の ◯◯ を探す。find ◯◯: 自分の中に、さらに特定の要素を探す(あまり使いませんが、一応あります)。
比較:ID指定 vs 拡張セレクタ(closest)
ID 指定
- コード:
hx-target="#row-123" - 悩み: サーバー側でIDを毎回生成して、HTMLに流し込まなければならない。
拡張セレクタ (closest)
- コード:
hx-target="closest tr" - 喜び: サーバーはIDを気にせず、常に同じHTMLを返せばいい。ブラウザ側で「自分の一番近い親のtr」と自動で解決してくれる。
まとめ:初心者のための「相対的」な視点
拡張セレクタを使いこなすと、あなたのWebアプリ開発は「絶対的な住所(ID)」から解放され、より柔軟で使い回しのきく「パーツ化」ができるようになります。
- 「this」と「closest」から始める: この二つを覚えるだけで、HTMXのターゲット指定の8割はカバーできます。
- リスト構造の最強の味方: たくさん並んだ商品リストやコメント欄などで、個別のIDをいちいち管理するのは大変です。
closestを使って「自分の親の枠」をごっそり変える。これこそがHTMX流のスマートな設計です。 - コードが「意味」を持つ:
closest .cardという記述は、後から読んだ時に「ああ、カード全体を更新したいんだな」と、意図がはっきりと伝わります。
自分との「距離」でターゲットを呼ぶ。HTMX独自の魔法の言葉 this, closest, next を使って、シンプルで頑丈な、メンテナンスのしやすいHTMLを書き上げてください。次の記事では、更新が終わったあとに自動で入力を促す「オートフォーカス(084. Auto-focus)」をご紹介します。