ラベル要素の内部テキストを変更するためにプレーン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を数回使用しています。次に、firstChild.nodeValueが非常に高速であることを示すこのjsperfテストを見つけました。少なくともそれは私がそれを意味すると解釈することです。
FirstChild.nodeValueの方がずっと速い場合、キャッチは何ですか?広くサポートされていませんか?他に問題はありますか?
MDNでのtextContent/innerText/innerHTMLの違い
およびinnerText/nodeValueについてのStackoverflowの回答
概要
innerText
は、Firefoxに caniuse に従ってFireFox 45まで存在しませんでしたが、すべての主要なブラウザでサポートされるようになりました。
.textContent
はtext/plain
を出力しますが、.innerHTML
はtext/html
を出力します。
簡単な例:
var example = document.getElementById('exampleId');
example.textContent = '<a href="https://google.com">google</a>';
出力:<a href="http://google.com"> google </a>
example.innerHTML = '<a href="https://google.com">google</a>';
出力: google
最初の例から、タイプtext/plain
の出力はブラウザーによって解析されず、コンテンツ全体が表示されることがわかります。タイプtext/html
の出力は、表示する前に解析するようブラウザに指示します。
私がよく知っていて一緒に仕事をしている2つはinnerHTMLとtextContentです。
textContentを使用するのは、段落のテキストまたは見出しを次のように変更するだけの場合です。
var heading = document.getElementById('heading')
var paragraph = document.getElementById('paragraph')
setTimeout(function () {
heading.textContent = 'My New Title!'
paragraph.textContent = 'My second <em>six Word</em> story.'
}, 2000)
em { font-style: italic; }
<h1 id="heading">My Title</h1>
<p id="paragraph">My six Word story right here.</p>
したがって、textContentはテキストを変更するだけですが、HTMLを解析しません。結果のプレーンテキストに表示されるタグからわかるように。
HTMLを解析する場合、次のようにinnerHTMLを使用します。
var heading = document.getElementById('heading')
var paragraph = document.getElementById('paragraph')
setTimeout(function () {
heading.innerHTML = 'My <em>New</em> Title!'
paragraph.innerHTML = 'My second <em>six Word</em> story.'
}, 2000)
em { font-style: italic; }
<h1 id="heading">My Title</h1>
<p id="paragraph">My six Word story right here.</p>
したがって、2番目の例では、DOM要素のinnerHTMLプロパティにHTMLとして割り当てた文字列を解析します。
これはすばらしく、大きなセキュリティ脆弱性です:)
(このセキュリティについて知りたい場合は、XSSを検索してください)
innerTextは、テキストを選択してコピーした場合に得られるおおよその値です。レンダリングされない要素はinnerTextに存在しません。
textContentは、allTextNodesの値を連結したものです。木。レンダリングされるかどうか。
グレートポスト 違いの詳細
innerHTMLは、innerTextまたはtextContentとの比較に含めるべきではありません。まったく異なるため、理由を本当に知っておく必要があります。
[注:この投稿は、何をすべきかを人々に伝えるよりも、誰かを助けるかもしれない特定のデータを共有することに関するものです]
誰かが今日何が一番速いのか疑問に思っている場合: https://jsperf.com/set-innertext-vs-innerhtml-vs-textcontent & https://jsperf.com/get -innertext-vs-innerhtml-vs-textcontent (2番目のテストでは、スパンのコンテンツはプレーンテキストであり、結果はコンテンツによって変わる可能性があります)
.innerHtml
が純粋な速度の点で素晴らしい勝者であるようです!
(注:ここでは速度についてのみ説明しています。使用するものを選択する前に、他の基準を確認することをお勧めします!)