コンテンツにスキップ

068. beforebegin(直前に挿入:自分の「前」に新しい要素を置く)

原理:「となり」に居場所を作る

自分を壊さず、仲間を増やす

これまでの innerHTMLouterHTML は、「入れ替える(上書きする)」という動きでした。しかし、今あるものを消さずに、その「直前(外側のすぐ上)」に新しいHTMLをポンと置きたい場合があります。

それが beforebegin(ビフォー・ビギン)です。

ターゲットとなる要素を「基準点」として、その手前に新しいパーツを挿入します。これは、リストの上の方に新しい項目を足したり、警告メッセージを要素の上にパッと出したりするのに非常に便利です。


実践:リストの先頭に「新しい風」を吹かせる

1. 新着ニュースを一番上に足す

最新のニュースが届くたびに、今のニュースを下に押し下げて、一番上に新しい行を追加する例です。

<!-- 
  hx-target: #news-list (リストの本体)
  hx-swap: beforebegin (リストのタグそのものより「前」に置く)
-->
<button hx-get="/api/latest-news" 
        hx-target="#news-list" 
        hx-swap="beforebegin">
    最新ニュースを確認
</button>

<ul id="news-list">
    <li>昨日のニュース:平和でした。</li>
</ul>
※注意:この書き方だと、<ul> の「外側」に新しい <li> が出てしまい、HTMLのルール(ulの中にはliを入れるという原則)から外れてしまうことがあります。

2. 正しい使いどころ:エラーメッセージの表示

入力フォームの上に、サッと警告メッセージを差し込むような使い方が最も安全で効果的です。

<div id="error-anchor"></div> <!-- 基準となる透明な目印 -->

<button hx-post="/api/save" 
        hx-target="#error-anchor" 
        hx-swap="beforebegin">
    保存する
</button>

3. ステップ・バイ・ステップ解説

  1. 基準点を決める: 「どこに足したいか」の目印となる要素を選びます。
  2. swapの指定: hx-swap="beforebegin" を書き込みます。
  3. 挿入される場所: ターゲットのタグが開く より前に HTMLが差し込まれます。

比較:innerHTML系 vs 挿入系(beforebeginなど)

innerHTML系(入れ替え)

  • 結果: 1つあったものが、新しい1つに変わる。

挿入系(追加)

  • 結果: 1つあったものが残されたまま、2つ(あるいはそれ以上)に増える。

まとめ:初心者のための「空間」の活用術

beforebegin は、既存の画面レイアウトを壊すことなく、新しい情報をそっと「添える」ためのテクニックです。

  • 基準点は「動かないもの」に: 基準にする要素自体が消えたり動いたりすると、次に追加される場所もズレてしまいます。土台はしっかりしたID付きの要素を選びましょう。
  • HTML構造を意識する: beforebegin はターゲットの「外」に置くものです。リストの「中」に足したい場合は、次々回に紹介する afterbegin の方が適していることが多いです。
  • ログや履歴の表示に: 次々と新しい情報が上に積み重なっていくようなUIを作るときに、非常に重宝します。

今あるものの一歩前へ。beforebegin を使って、流れるように新しい情報が追加されていく、活気ある画面をデザインしてください。次の記事では、ターゲットの「内側の一番上」に潜り込ませる「afterbegin」(069. afterbegin)をご紹介します。