textContent と innerText の違い
textContent と innerText は、要素のテキストを取得・設定するプロパティです。似ていますが、いくつかの違いがあります。
基本的な使い方
<p id="message">Hello, World!</p>const p = document.getElementById('message');
// 取得
console.log(p.textContent); // "Hello, World!"
console.log(p.innerText); // "Hello, World!"
// 設定
p.textContent = '新しいテキスト';主な違い
| 特徴 | textContent | innerText |
|---|---|---|
| 非表示要素 | 含む | 含まない |
| <style> <script> | 含む | 含まない |
| 改行・空白 | そのまま | 整形される |
| パフォーマンス | 速い | 遅い |
非表示要素の扱い
display: none の要素のテキストは、innerText では取得されません。
<div id="container">
表示テキスト
<span style="display: none;">非表示テキスト</span>
</div>const container = document.getElementById('container');
console.log(container.textContent); // "表示テキスト 非表示テキスト"
console.log(container.innerText); // "表示テキスト"改行の扱い
<div id="content">
行1
行2
行3
</div>innerText は見た目どおりの改行を返しますが、textContent は HTML の空白をそのまま返します。
実際に動かしてみよう
HTML
CSS
JavaScript
<div id="target">
<span>表示テキスト</span>
<span style="display:none">非表示テキスト</span>
</div>
<button id="textContentBtn">textContent</button>
<button id="innerTextBtn">innerText</button>
<pre id="result"></pre>const target = document.getElementById('target');
const result = document.getElementById('result');
document.getElementById('textContentBtn').addEventListener('click', () => {
result.textContent = 'textContent: "' + target.textContent.trim() + '"';
});
document.getElementById('innerTextBtn').addEventListener('click', () => {
result.textContent = 'innerText: "' + target.innerText + '"';
});セキュリティ面
どちらもテキストとして設定するので、HTML がエスケープされます。
element.textContent = '<script>alert("XSS")</script>';
// <script> がそのまま文字として表示される(実行されない)これは innerHTML との大きな違いです。ユーザー入力を表示するときは textContent や innerText を使うと安全です。
どちらを使うべきか
textContent
パフォーマンスが良い。非表示要素も含む。通常はこちら
innerText
見た目どおりのテキストが欲しいとき。遅い
基本的には textContent を使い、表示されているテキストだけが必要な場合に innerText を使う、という使い分けがおすすめです。