[解決済み] JavascriptのinnerHTMLとouterHTMLの比較
質問
以下のようなjavascriptがあります。
// create a new article tag
var elem = document.createElement('article');
// append the article to the comments list
document.querySelector('#comments-list').appendChild(elem);
記事の内容を設定し、いくつかのクラスも追加したいので、これを行うための2つの方法を検討しています。
// Option 1
// set the content using .innerHTML()
// and add the classes manually to the classList
elem.innerHTML = "This is the comment";
elem.classList.add('comment');
// Option 2
// set the content and classes in one go using .outerHTML()
elem.outerHTML = "<article class='comment'>This is the comment</article>";
どちらもうまくいくのですが、気がつくと
.innerHTML
は要素が DOM に追加される前に呼び出される必要があります。
outerHTML
は、DOM に追加された後に呼び出される必要があります。
実際にこのjavascriptファイルでRailsパーシャルをレンダリングしているので、2番目のオプションが望ましいというニュアンスもありますね。
質問は、これらのテクニックのうち、どちらか一方が優れているかどうかということです。DOMに要素を追加して、その後にHTMLを変更することは問題なのでしょうか?それとも、DOM に書き込む前に innerHTML を設定する方がパフォーマンスの観点からは良いのでしょうか?
解決方法は?
から引用しています。 MDN -サイト :
インナーHTML
-
は
Element.innerHTML
プロパティは、その要素の子孫を記述する HTML 構文を設定または取得します。
注意:もし
<div>
,
<span>,
または
<noembed>
ノードは、以下のような子テキストノードを持ちます。
という文字が含まれています。
(&), (<),
または
(>)
,
innerHTML
はこれらの
は、それぞれ &, <, > となります。使用方法
Node.textContent
を使用すると
は、これらのテキストノードの内容を正しくコピーすることができます。
アウターHTML
は
outerHTML
属性は
element
DOM インターフェースは、その要素を記述した HTML フラグメントを、その子孫も含めてシリアライズして取得します。これは、与えられた文字列から解析されたノードで要素を置き換えるために設定することができます。
インナーHTML vs. アウターHTML :
使用方法
innerHTML
をデフォルトで使用します。これは
のみ
コンテンツ("="を使用する場合)。
内側
参照される現在の要素。を使用している場合
outerHTML
を指定した場合、その
要素
を参照すると
また
が置き換わる。
デモの様子
var h20 = document.getElementById("h20"),
h21 = document.getElementById("h21");
var ran = false;
console.log("'h20' innerHTML (1) =", "'" + h20.innerHTML + "'", "outerHTML (1) =", "'" + h20.outerHTML + "'");
console.log("'h21' innerHTML (1) =", "'" + h21.innerHTML + "'", "outerHTML (1) =", "'" + h21.outerHTML + "'");
document.getElementById("button").onclick = evt => {
if (ran) return false;
h20.innerHTML = "<div>innerHTML</div>";
h21.outerHTML = "<div>outerHTML</div>";
console.log("'h20' innerHTML (2) =", "'" + h20.innerHTML + "'", "outerHTML (2) =", "'" + h20.outerHTML + "'");
console.log("'h21' innerHTML (2) =", "'" + h21.innerHTML + "'", "outerHTML (2) =", "'" + h21.outerHTML + "'");
ran = true
}
<button id="button">innerHTML vs. outerHTML</button>
<br>
<h2 id="h20"></h2>
<h2 id="h21"></h2>
関連
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み] [Solved] Uncaught TypeError: nullのプロパティ 'appendChild' を読み取ることができない。
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools