コンテンツにスキップ

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)」をご紹介します。