1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

contenteditable 属性で「form を使わないテキスト編集」を理解する

Last updated at Posted at 2025-12-30

🌸 はじめに

Web アプリを開発していると、Webブラウザで動作する WYSIWYG(ウィジウィグ)エディタのライブラリを使用するケースがあります。

Tiptap、Editor.js、Quill 等ありますが、実際にどうのような仕組みで Web ブラウザ上でテキストを編集しているのでしょうか?

今回は、この「 Web ブラウザ上でテキストを編集できる」HTML の contenteditable 属性 に着目して記事を書こうと思います。

:thinking: contenteditable 属性とは何ぞ?

wikibooks では以下のように解説されています。

contenteditable 属性 は、要素の内容をユーザーが編集可能にするかどうかを指定するために使用される属性です。この属性を使用すると、特定の要素をブラウザ上で直接編集できるようになります。属性値には、true(編集可能)、false(編集不可)、または inherit(親要素から継承)のいずれかを指定できます。

要するに『何かしらの HTML の要素に contenteditable="true" を指定すると、その要素はブラウザで編集できる!』ということらしいです 🥰

従来の HTML では、Web ブラウザ上でテキストを編集して送信する際、form タグを使用して、その内側に input タグや textarea タグを記述して送信処理をしていました。

しかし、上記の説明にもある通り contenteditable 属性 を活用すれば、form を使用しなくても Web ブラウザ上でテキスト編集でき、また編集したコンテンツをサーバーに送信したり、ローカルで保存したりすることも可能です。

:writing_hand: contenteditable 属性を体験する

文字で説明してもピンとこないかもしれませんので、実際にコードを書いてどのように contenteditable 属性 が動作するか確認してみましょう。

まず、以下のように index.html を作成します。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Editable Text Submit</title>
  <style>
    body {
      font-family: sans-serif;
      padding: 20px;
    }
    .editor {
      border: 1px solid #ccc;
      padding: 10px;
      min-height: 120px;
    }
  </style>
</head>
<body>
  <h1>メモ投稿</h1>

  <div id="editor" class="editor" contenteditable="true">
    ここにメモを書いてください
  </div>

  <button id="submit">送信</button>

  <script src="script.js"></script>
</body>
</html>

上記のファイルが保存できたら、LiveServer 等を使用して、Web ブラウザで index.html を表示してみましょう。

表示してみたら、「ここにメモを書いてください」という場所を選択して、テキストを入力してみましょう。実際に、文字を書くことが可能です。

スクリーンショット 2025-12-30 183138 - コピー.gif

さて、ここで確認したいのが、form を使わなくても編集エリアを作ることが可能だ ということです。

HTML ファイルのコードをご覧のとおり form や input、textarea が存在しなくても、contenteditable 属性 を指定するだけで、その指定した要素に対してテキストを入力し、また編集することが可能になります。

🧤 入力した文字を取得してみる

それでは、次に contenteditable 属性 を指定した div 要素で記入された内容を取得してみましょう。

以下のように script.js ファイルを作成し保存してください。

script.js
const editor = document.getElementById("editor");
const submitBtn = document.getElementById("submit");

submitBtn.addEventListener("click", () => {
  const content = editor.innerHTML;
  console.log(content);
});

保存したら、ブラウザを更新して上記の JS ファイルが読み込まれるようにしましょう。

そうしたら、再度 div 要素のエリアでテキストを編集してみた後、送信ボタンを押してブラウザのコンソール画面を確認してください。

するとどうでしょう!div 要素で入力したテキスト内容がコンソール画面で確認することができます。

更に詳しく見てみると、コンソールに表示されている内容は、HTML として表現された、現在の編集状態そのものの内容 になっていることも分かります。

スクリーンショット 2025-12-30 222016 - コピー.gif

このコードで大切なのは、input.value の代わりに innerHTML を使用して入力したテキスト情報を取得しているところです。

今回は input 要素を使用していないので、input.value を使用して div 要素の値を取得することはできません。

その代わりに innerHTML を使って div 要素に記入された内容を 「装飾込みのテキスト」 として取得しています。

📝 テキストをローカルストレージに保存する

次に、取得した文字列をローカルストレージに保存してみましょう。

ちなみに 「ローカルストレージって何ぞ?」 という方に、以下のようなに簡単に説明文を書いておきます!👍

簡単なローカルストレージの説明
・ブラウザにデータを保存できる
・ページをリロードしても消えない
・サーバー不要

それでは、script.js を以下のように変更して保存してください。

script.js
const editor = document.getElementById("editor");
const submitBtn = document.getElementById("submit");

submitBtn.addEventListener("click", () => {
  const content = editor.innerHTML;
  console.log(content);
+ 
+ localStorage.setItem("savedContent", content);
+ alert("ブラウザに保存しました");
});

ここでは、取得したテキストデータをローカルストレージに保存しています。

🌱 保存した内容を復元する

最後に、ローカルストレージに保存したデータをブラウザで更新しても復元できるようにしてみましょう。ページ読み込み時に保存データが反映されるように以下のように script.js ファイルを更新してください。

script.js
const editor = document.getElementById("editor");
const submitBtn = document.getElementById("submit");

submitBtn.addEventListener("click", () => {
  const content = editor.innerHTML;
  console.log(content);
  
  localStorage.setItem("savedContent", content);
  alert("ブラウザに保存しました");
});

+ window.addEventListener("DOMContentLoaded", () => {
+   const saved = localStorage.getItem("savedContent");
+ 
+   if (saved) {
+     editor.innerHTML = saved;
+   }
+ });

ブラウザを更新して、JS ファイルを適用して、テキストを入力し保存後、もう一度ブラウザを更新してみましょう!

すると、ブラウザを更新前の情報を、ブラウザ更新後もそのまま利用することができます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?