--- title: Element.innerHTML slug: Web/API/Element/innerHTML tags: - API - DOM - DOM Parsing - Element - Parsing HTML - プロパティ - リファレンス - innerHTML - プロパティ browser-compat: api.Element.innerHTML translation_of: Web/API/Element/innerHTML --- {{APIRef("DOM")}} {{domxref("Element")}} オブジェクトの **`innerHTML`** プロパティは、要素内の HTML または XML のマークアップを取得したり設定したりします。 要素の内容を置き換えるというより、文書に HTML を挿入するという場合には、 {{domxref("Element.insertAdjacentHTML", "insertAdjacentHTML()")}} メソッドを使用してください。 ## 構文 ```js const content = element.innerHTML; element.innerHTML = content; ``` ### 値 要素の子孫を HTML にシリアライズしたものを含んだ {{domxref("DOMString")}} です。 `innerHTML` に値を設定すると、要素のすべての子孫を削除して、 _htmlString_ の文字列で与えられた HTML を解釈して構築されたノードに置き換えます。 ### 例外 - `SyntaxError` {{domxref("DOMException")}} - : 正しくない形の HTML の文字列を使用して `innerHTML` の値を設定しようとした場合に発生します。 - `NoModificationAllowedError` {{domxref("DOMException")}} - : 親が {{domxref("Document")}} であるノードに HTML を挿入しようとした場合に発生します。 ## 使用上のメモ `innerHTML` プロパティは、ページの現在の HTML ソースを、ページが最初に読み込まれてから行われたあらゆる変更を含めて、見るために利用することができます。 ### 要素の HTML コンテンツの読み取り `innerHTML` を読み取ると、ユーザーエージェントが要素の子孫で構成される HTML または XML の断片をシリアライズします。結果として文字列が返ります。 ```js let contents = myElement.innerHTML; ``` これで、 HTML のコンテンツのノードの HTML マークアップを見ることができます。 > **Note:** 返される HTML または XML の断片は、現在の要素の中身に基づいて生成されますので、返される断片のマークアップや整形方法は、元のページのマークアップと同じであるとは限りません。 ### 要素の中身の置き換え `innerHTML` の値を設定することで、既存の要素の内容を新しい内容に置き換えることが簡単にできます。 > **Note:** 挿入される文字列に悪意のある内容が含まれる可能性がある場合、[セキュリティ上のリスク](#セキュリティの考慮事項)になります。 > ユーザーが提供したデータを挿入する場合は、 {{domxref("Element.SetHTML()")}} を使用するよう常に検討してください。こちらは挿入する前に無害化を行います。 例えば、文書の {{domxref("Document.body", "body")}} 属性の内容を消去することで、文書の内容全体を消去することができます。 ```js document.body.innerHTML = ""; ``` この例は文書の現在の HTML マークアップを走査し、 `"<"` の文字を HTML エンティティの `"<"` に置き換え、それによって本質的に HTML を生テキストに変換します。そしてこれを {{HTMLElement("pre")}} で囲みます。そして、 `innerHTML` の値をこの新しい文字列に変更します。結果として、文書の内容がページ全体のソースコードの表示に置き換わります。 ```js document.documentElement.innerHTML = "
" +
         document.documentElement.innerHTML.replace(/";
```

#### 操作の詳細

`innerHTML` に値を設定すると、正確には何が起きるのでしょうか?これを行うと、ユーザーエージェントは以下のステップを追います。

1. 指定された値は (文書型に基づいて) HTML または XML として解釈され、新しい一連の要素の DOM ノードを表す {{domxref("DocumentFragment")}} オブジェクトの中に結果が入れられます。
2. 中身を置き換えようとしている要素が {{HTMLElement("template")}} 要素である場合は、 `