速報

AWS SDK for pandasのIceberg書き込みにSQL注入|Glueの変更権限も点検

CATEGORY

【JavaScript】innerHTMLで内容を書き換えずに要素を追加する

※本ページのリンクにはプロモーションが含まれています。

【JavaScript】innerHTMLで内容を書き換えずに要素を追加する

目次

本記事では、innerHTMLで対象の要素の内容を書き換えずに新しい要素を追加する方法をご紹介しています。

innerHTMLで内容を書き換えずに要素を追加したいんだけどいい方法ないかな?

上記の疑問にお答えします。

では、解説していきます。

スポンサーリンク

innerHTMLで実現したいこと

冒頭でも少しお話させていただきましたが、実現したいことは単純です!

  • innerHTMLを使って、内容を書き換えずに要素を追加する

です!

に要素を挿入する場合、一般的にはappendChild()やinsertAdjacentHTML()を使用します。innetHTMLで処理してしまうと、どうしてもDOMを破壊することになりますので、一般的には推奨されていません。ただ、知識として知っておくことは大事ですので、あくまでこんな方法もあるよ、くらいにご認識いただければ幸いです!

という前置きをした上で本題に戻ります。

innerHTMLで普通に要素を代入してみる

検証用の要素を用意します。ここではわかりやすいリストを使用することにします。JavaScriptから要素を取得しやすいようにidなんかを持たせておきましょう!

HTML

<ul id="list">
    <li>jQuery</li>
</ul>

これで要素の用意ができました!まずは普通にinnerHTMLを使用してみます。JavaScriptで上記で用意したリストを取得して、リストにinnerHTMLでリストアイテムを代入します。

JS

const list = document.getElementById('list');
list.innerHTML = '<li>JavaScript</li>';

実行結果はこちら!

実行結果

<ul id="list">
    <li>JavaScript</li>
</ul>

ご想像の通りですね。リスト内のリストアイテム(jQuery)は削除され、新しく代入したリストアイテム(JavaScript)のみが存在しています。指定した要素の内部は破壊され、新しい要素のみが存在する状態です。こちらが普通にinnerHTMLを実行した結果ですね。

スポンサーリンク

innerHTMLで既存の要素に追加する(ように見せる)

HTMLは上記で用意したリストを使用します。変更するのはJavaScript側、しかも一つ演算子を足すだけです。

修正後のスクリプトがこちら!

JS

const list = document.getElementById('list');
list.innerHTML += '<li>JavaScript</li>';

代入演算子の部分を加算代入演算子に変更しただけです。では、上記の実行結果を見てみましょう!

実行結果

<ul id="list">
    <li>jQuery</li>
    <li>JavaScript</li>
</ul>

出力された結果を見ると既存の要素が残ったまま新しい要素が追加されたように見えますね!万歳!

この方法の注意点

この方法はあくまで新しい要素を追加したように見せているだけで、実際には追加前に存在していた要素とは別の要素になります。追加前の要素は削除され、同じように見える新しい要素が生成されたイメージでしょうか。

例えば下記のような要素があるとします。

<ul id="list">
    <li id="list-item">JavaScript</li>
</ul>

このリストアイテムにクリックイベントを設定した状態でinnerHTMLを実行してみましょう。

const list = document.getElementById('list');
const listItem = document.getElementById('list-item');

listItem.addEventListener('click', ()=> {
    alert('Test');
}, false);

list.innerHTML += '<li>jQuery</li>';

結果はご想像の通り。

innerHTMLを実行した後ではクリックイベントは発生しません。このことから、何となく言わんとしていることがわかっていただけたかなと思います!

最後に

JavaScriptで要素を追加する場合は基本的にそれに応じたメソッドを使用することになります。

わかっている、わかってはいるが…どうしてもinnerHTMLを使わなきゃいけないんだ!

そういう非常事態の際に本記事でご紹介した内容が役立つことを願っています!

以上、JavaScriptのinnerHTMLで内容を書き換えずに要素を追加する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

DOM

HTMLの文書を、JavaScriptから操作できるように木構造で表したもの。要素の追加や変更、イベントの処理に使う。

詳しく見る