2012-09-05 1 views
31

可能性の重複:私の実験では
How to retrieve the text of a DOM Text node?テキストノードで作業するときは、 "data"、 "nodeValue"、 "textContent"または "wholeText"フィールドを使用する必要がありますか?

私はtargetがテキストノードであるとき、すべての新しいテキストを含む四つのフィールドがあることに気づいたDOM変異オブザーバーを処理するために、ノード

  • data
  • nodeValue
  • textContent
  • wholeText

私が使用する必要があり、これらのフィールドのための "ベストプラクティス" はありますか?

他のブラウザや古いDOM標準との互換性のためだけのものもありますか?私はテキストを修正することとvsを変更することとの違いはありますか?もし他の人たちの目的が何であれ、それが最善であれば?

+0

あなたが正しいです、私は答える前に検索していたはずです。 ) – raina77ow

+0

@ raina77ow:私は検索しましたが、検索する方法が複数あり、質問を投稿した後に検索していました( - : – hippietrail

答えて

28

これらのうち、dataを選択しました。これは、CharacterDataインターフェイス(TextおよびCommentもの)を実装するノードに対してのみ定義されています。他の人のためにこのプロパティにアクセスしようとするとundefinedとなります。

nodeValueは、テキストノードの場合は実質的にdataと同じですが、実際には属性ノードとコメントノードに対しても定義されています。そして、私は通常、自分のプログラムが早く失敗するのを望んでいます。 )

textContentは、ノードのテキストコンテンツであるとその子孫を表しているため、全く違うものです。これは、wholeTextといっしょに、単一のテキストノードより複雑な構造からのテキストを収集するために、おそらくもっと使用されるべきです。

これらのすべては、DOMレベル3(=もっと近代的)で定義されたtextContentwholeTextです。

+0

私がここに尋ねる前に実際に 'data'を使っていました。しかし、それは最も簡潔だったからです。決定的な理由もありました。( - : – hippietrail

+0

実際には、これらの4つのうち、textContentだけが書き込み可能です...(あるいは、実際のものを更新しているようですなぜでしょうか? – Michael

+2

訂正: 'data'は"テキストノードのみ "と定義されていますが、[CharacterDataインターフェイス](http://www.w3.org/TR/DOM-Level-3- Core/core.html#ID-FF21A306)は、[テキストノード](http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772)によって継承されるだけでなく、 [コメントノード](http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1728279322)も参照してください。 –

関連する問題