web-dev-qa-db-ja.com

テキストノードを操作する場合、「data」、「nodeValue」、「textContent」、または「wholeText」フィールドを使用する必要がありますか?

重複の可能性:
DOMテキストノードのテキストを取得する方法は?

DOMミューテーションオブザーバーを処理するための私の実験では、targetがテキストノードである場合、ノードの新しいテキストをすべて含む4つのフィールドがあることに気付きました。

  • data
  • nodeValue
  • textContent
  • wholeText

これらのフィールドのどれを使用する必要があるかについての「ベストプラクティス」はありますか?

他のブラウザや古いDOM標準との互換性のためだけのものはありますか?私が読んでいるのか、テキストを変更しているのかで違いはありますか? 1つが最善である場合、他の目的は何ですか?

39
hippietrail

これらすべての中からdataを選択します。これは CharacterData インターフェイス(- テキスト および コメント 1つ)のみ。他の人のためにこのプロパティにアクセスしようとすると、undefinedが得られます。

nodeValue は、基本的にテキストノードのdataと同じですが、実際には属性ノードとコメントノードにも定義されています。そして、私は通常、プログラムを早期に失敗させたいと思っています。 )

textContent は、ノードとその子孫のテキストコンテンツを表すため、私にとってはまったく異なるものです。これは、 wholeText とともに、単一のテキストノードよりも複雑な構造からテキストを収集するために使用する必要があります。

とはいえ、textContentwholeTextはDOMレベル3(=より現代的)で定義されました。

36
raina77ow