1. ホーム
  2. javascript

[解決済み] nodeValue vs innerHTML and textContent。どう選ぶ?重複

2022-05-16 01:01:40

質問

label要素の内側のテキストを変更するためにplain jsを使っているのですが、innerHTMLやnodeValue、textContentをどのような根拠で使えばいいのか分かりませんでした。新しいノードを作ったり、HTML要素を変更したりする必要はなく、ただテキストを置き換えるだけです。以下はコードの例です。

var myLabel = document.getElementById("#someLabel");
myLabel.innerHTML = "Some new label text!"; // this works

myLabel.firstChild.nodeValue = "Some new label text!"; // this also works.

myLabel.textContent = "Some new label text!"; // this also works.

jQueryのソースを見てみると、nodeValueは1回だけですが、innerHTMLとtextContentは何度も使っています。そして、このjsperfのテストを見つけ、firstChild.nodeValueがかなり高速であることを示しました。少なくとも、私はそれを意味するものと解釈しています。

firstChild.nodeValue がそんなに速いのであれば、何が引っかかるのでしょうか?広くサポートされていないのでしょうか。何か他の問題があるのでしょうか?

どのように解決するのですか?

MDNでのtextContent/innerText/innerHTMLの違いについて。

そしてinnerText/nodeValueに関するStackoverflowの回答。

概要

  1. インナーHTML はコンテンツをHTMLとして解析するため、時間がかかります。
  2. ノード値 はストレートテキストを使用し、HTMLをパースせず、より高速です。
  3. テキストコンテンツ はストレートテキストを使用し、HTMLをパースせず、より速いです。
  4. インナーテキスト スタイルを考慮する。例えば隠しテキストは取得しない。

innerText は Firefox 45 まで Firefox に存在しなかったそうです。 カニース が、現在ではすべての主要なブラウザでサポートされています。