При работе с текстовыми узлами следует использовать поле data, nodeValue, textContent или wholeText?

Возможный дубликат:
Как получить текст узла DOM Text?

В моих экспериментах по обработке наблюдателей мутаций DOM я заметил, что когда target является текстовым узлом, есть четыре поля, содержащие новый текст узла.

  • data
  • nodeValue
  • textContent
  • wholeText

Есть ли «лучшая практика», для которой из этих полей я должен использовать?

Некоторые предназначены только для совместимости с другими браузерами или старыми стандартами DOM? Имеет ли значение, читаю ли я текст или изменяю его? Если один лучший, какова цель других?


person hippietrail    schedule 05.09.2012    source источник


Ответы (1)


Из всего этого я бы выбрал data: он определен для узлов, реализующих Интерфейс CharacterData (Текст и комментарий< /strong> только единицы). Попытка доступа к этому свойству для других дает undefined.

nodeValue по существу совпадает с data для текстовых узлов, но на самом деле определяется для атрибутов и также узлы комментариев. И я обычно хочу, чтобы мои программы потерпели неудачу раньше. )

Для меня textContent — это нечто совершенно другое, поскольку оно представляет собой текстовое содержимое узел и его потомки. Это, наряду с wholeText, возможно, следует использовать больше для сбора текстов из более сложных структур. чем один текстовый узел.

Сказав все это, textContent и wholeText были определены в DOM Level 3 (= более современный).

person raina77ow    schedule 05.09.2012
comment
На самом деле я тоже использовал data, прежде чем спросил здесь. Я думаю, отчасти потому, что он был первым в алфавитном порядке, а отчасти потому, что он был самым кратким. Однако хорошо иметь более детерминированные причины! (-: - person hippietrail; 05.09.2012
comment
На самом деле кажется, что из этих четырех только textContent доступен для записи... (или, скорее, это единственный, который, кажется, обновляет этот фактический отображаемый контент). почему это? - person Michael; 26.01.2014
comment
Исправление: data определяется не только для текстовых узлов, но и для интерфейс CharacterData, который наследуется не только текстовые узлы, а также Узлы комментариев. - person Rob W; 04.08.2014