[解決済み] innerText vs innerHTML vs label vs text vs textContent vs outerText
質問
私は、Javascriptによって入力されるドロップダウンリストを持っています。
ロード時に表示するデフォルトの値を何にするか決めているときに、以下のプロパティがまったく同じ値を表示していることに気づきました。
-
innerText
-
innerHTML
-
label
-
text
-
textContent
-
outerText
私自身の調査では、いくつかのベンチマークのテストや比較はありますが、すべてではありません。
自分の常識で考えて、同じ結果だからどちらかを選べばいいのですが、もしデータが変わってしまったらどうしようという不安があります。
私の調査結果は
-
innerText
は値をそのまま表示し、含まれる可能性のあるHTMLフォーマットは無視されます。 -
innerHTML
は、値を表示し、任意の HTML フォーマットを適用します。 -
label
と同じに見える。innerText
ということで、違いがわかりません。 -
text
と同じに見える。innerText
が、jQueryのショートハンド版である -
textContent
と同じに見える。innerText
のような書式を保持しますが\n
) -
outerText
と同じに見える。innerText
私の研究は、私が思いつくものをテストしたり、出版物を読んだりすることしかできないので、ここまでしかできません。
label
と
outerText
?
解決方法は?
から MDN :
Internet Explorerでは、element.innerTextが導入されました。その意図は[textContentと]ほとんど同じですが、いくつかの相違点があります。
textContent は、以下のようなすべての要素の内容を取得することに注意してください。
<script>
と<style>
要素では、IE固有のプロパティであるinnerTextとほぼ同等ですが、そうではありません。innerTextはスタイルも意識しており、hidden要素のテキストを返しませんが、textContentは返します。
innerTextはCSSのスタイリングを意識しているので、textContentがリフローを起こさないのに対して、innerTextはリフローを起こします。
そこで
innerText
はCSSで隠されているテキストを含めないが
textContent
となります。
innerHTMLはその名の通り、HTMLを返します。要素内のテキストを取得したり書き込んだりするためにinnerHTMLを使うことがよくありますが、代わりにtextContentを使うべきです。テキストはHTMLとしてパースされないので、パフォーマンスが良くなる可能性が高いです。さらに、これはXSS攻撃のベクトルを回避することにもなる。
念のため、もっとわかりやすく繰り返します。
する
ない
使用
.innerHTML
ただし、要素内にHTMLを挿入することを特に意図し、挿入するHTMLに悪意のあるコンテンツが含まれないことを保証するために必要な予防措置を講じた場合は、この限りではありません。テキストだけを挿入したい場合は
.textContent
またはIE8以前をサポートする必要がある場合は、機能検知を使用して
.textContent
と
.innerText
.
これほど多くのプロパティが存在する主な理由は、もともとブラウザによってこれらのプロパティの名前が異なっており、いまだにすべてのプロパティがクロスブラウザで完全にサポートされていないためである。jQueryを使用している場合は、以下のようにします。
.text()
これは、クロスブラウザの差異を滑らかにするように設計されているからです*。
その他の一部について
outerHTML
とは基本的に同じです。
innerHTML
ただし、所属する要素の開始タグと終了タグが含まれます。についての説明はあまり見当たりません。
outerText
ということです。おそらく不明瞭なレガシー・プロパティで、避けるべきものだと思います。
関連
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
[解決済み】ReactJSでエラー発生 Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] 画像の横のテキストを縦に揃える?
-
[解決済み] jQueryを使用してdivのinnerHTMLを置き換えるには?
-
[解決済み] JavaScriptでテキスト入力フィールドの値を取得するにはどうすればよいですか?
-
[解決済み】innerText、innerHTML、valueの違い?
-
[解決済み】HTML文字列をDOM要素に変換する?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
Vueのクラススタイルの使い方の詳細
-
Vueでルートネスティングを実装する例
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
[解決済み] nodeValue vs innerHTML and textContent。どう選ぶ?重複