要素の中身を変更する方法としてtextContent 、innerText 、innerHTMLの3つがあります。
今回はそれぞれの違いと使い分けについてまとめました。

textContent 、innerText 、innerHTMLの違い
■textContent
要素の中身を すべて「文字」として扱う プロパティです。
HTMLタグを書いても、そのまま文字列として表示されます。
■innerText
「画面上で見えているテキスト」を扱うプロパティです。
CSS の影響を受けるため、非表示の要素は取得されません。
また、\n(改行コード)を HTML の改行として扱ってくれるのが特徴です。
■innerHTML
テキストだけでなく HTMLタグとして解釈して描画 します。
値に <b> や <br> を入れると、それらがタグとして認識されます。
・<b> は太字
・<br> は改行
ただし注意点として、ユーザーが入力した値をそのまま innerHTML に入れると悪意あるスクリプト(XSS)が実行される可能性があります。
安全性に十分配慮が必要です。
表にまとめると以下になります。
| プロパティ | 役割 | HTML解釈 | CSSの影響 | 非表示要素 (画面には表示されない) | パフォーマンス | こんな時に使う |
| textContent | 要素のテキストをそのまま操作 | ❌ 無視 | ❌ 無関係 | 含む | ◎ 速い | ・純粋なテキストを扱いたい ・HTMLタグを解釈させたくない ・高速にテキストを更新したい |
| innerText | 見た目上のテキストを取得 | ❌ 無視 | ✅ レイアウト反映 | 含まない | △ 遅い(再レンダリング※発生) | ・画面に見えているテキストを取得したい ・コピー&ペースト時のような「見た目通りの文章」が必要 |
| innerHTML | HTMLごと操作 | ◎ HTMLとして解析 | ❌ | 含む | △ 遅い+安全性注意 | ・HTML構造を動的に作りたい |
※レンダリングとは?
ブラウザが HTML/CSS/JavaScript を読み取り、画面に表示する処理のこと。
innerText は「画面に見えているテキスト」を計算するため、このレンダリング工程が再度発生し、処理が重くなることがあります。
サンプルコードと実行結果
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>textContent / innerText / innerHTML サンプル</title>
<style>
.box {
border: 1px solid #aaa;
padding: 10px;
margin-bottom: 20px;
}
</style>
</head>
<body>
<h2>textContent</h2>
<div id=”box1″ class=”box”></div>
<h2>innerText</h2>
<div id=”box2″ class=”box”></div>
<h2>innerHTML</h2>
<div id=”box3″ class=”box”></div>
<script>
const text = “くれびです!”;
// ——————
// ① textContent
// ——————
// タグを書いても「文字として」そのまま表示される
document.getElementById(“box1”).textContent = “<strong>” + text + “</strong>”;
// ——————
// ② innerText
// ——————
// textContent と似ているが、CSS 非表示などの影響を受ける
document.getElementById(“box2”).innerText = “<strong>” + text + “</strong>”;
// ——————
// ③ innerHTML
// ——————
// HTML として解析され、タグが反映される
document.getElementById(“box3”).innerHTML = “<strong>” + text + “</strong>”;
</script>
</body>
</html>
実行結果の違い
| プロパティ | 表示される結果 |
| textContent | <strong>くれびです!</strong>(タグがそのまま表示される) |
| innerText | <strong>くれびです!</strong>(タグは文字として扱われる) |
| innerHTML | くれびです!(太字)(strong が反映される) |
まとめ
・textContent:一番使いやすく高速。テキストだけ扱うならこれ。
・innerText:画面に表示されるテキストが必要なときに便利。
・innerHTML:HTML構造を動的に作るときに便利だが、安全性と速度に注意。
迷ったときは、基本は textContent。どうしても必要なときだけ innerText / innerHTML を使う。
違いを押さえて、使いこなしましょう。
