JavaScript. Подробное руководство, 6-е издание, стр. 210

<b>  if (value === undefined) { // Если аргумент value не указан,</b>

<b>    if (content !== undefined) return content; // вернуть текущий текст</b>

<b>    else return element.innerText;</b>

<b>  }</b>

<b>  else { // Иначе записать текст</b>

<b>    if (content !== undefined) element.textContent = value;</b>

<b>    else element.innerText = value;</b>

<b>  }</b>

<b>}</b>

Свойство

<b>textContent</b>
возвращает результат простой конкатенации всех узлов
<b>Text</b>
, потомков указанного элемента. Свойство
<b>innerText</b>
не обладает четко определенным поведением и имеет несколько отличий от свойства
<b>textContent.innerText</b>
не возвращает содержимое элементов
<b>&lt;script&gt;.</b>
Из возвращаемого им текста удаляются лишние пробелы и предпринимается попытка сохранить табличное форматирование. Кроме того, для некоторых элементов таблиц, таких как
<b>&lt;table&gt;, &lt;tbody&gt;</b>
и
<b>&lt;tr&gt;,</b>
свойство
<b>innerText</b>
доступно только для чтения.

Текст в элементах <script>

Встроенные элементы

<b>&lt;script&gt;</b>
(т.е. без атрибута
<b>src</b>
) имеют свойство
<b>text</b>
, которое можно использовать для получения их содержимого в виде текста. Содержимое элементов
<b>&lt;script&gt;</b>
никогда не отображается в броузерах, а HTML-парсеры игнорируют угловые скобки и амперсанды внутри сценариев. Это делает элемент
<b>&lt;script&gt;</b>
идеальным средством встраивания произвольных текстовых данных, доступных для использования веб-приложением. Достаточно просто определить в атрибуте
<b>type</b>
элемента какое-либо значение (такое как «text/x-custom-data»), чтобы сообщить, что этот сценарий не содержит выполняемый программный код на языке JavaScript. В этом случае интерпретатор JavaScript будет игнорировать сценарий, но сам элемент будет включен в дерево документа, а содержащиеся в нем данные можно будет получить с помощью свойства
<b>text</b>
.

*****************************

15.5.3. Содержимое элемента в виде текстовых узлов

Еще одним средством доступа к содержимому элемента является список дочерних узлов, каждый из которых может иметь свое множество дочерних узлов. Когда речь заходит о содержимом элемента, наибольший интерес обычно представляют текстовые узлы. При работе с XML-документами необходимо также быть готовыми встретить узлы

<b>CDATASection</b>
- подтип класса
<b>Text</b>
- представляющие содержимое разделов
<b>CDATA</b>
.

Пример 15.3 демонстрирует функцию

<b>textContent(),</b>
которая выполняет рекурсивный обход дочерних элементов и объединяет текст, содержащийся во всех текстовых узлах-потомках. Чтобы было более понятно, напомню, что свойство
<b>nodeValue</b>
(определяемое типом
<b>Node</b>
) хранит содержимое текстового узла.

Пример 15.3. Поиск всех текстовых узлов, потомков указанного элемента

<b>// Возвращает простое текстовое содержимое элемента е, выполняя рекурсивный </b>

<b>// обход всех дочерних элементов. Этот метод действует подобно свойству textContent </b>

<b>function textContent(e) {</b>

<b>  var child, type, s = // s хранит текст всех дочерних узлов</b>

<b>  fог(child = е.firstChild; child != null; child = child.nextSibling) {</b>

<b>    type = child.nodeType;</b>

<b>    if (type === 3 || type === 4) // Узлы типов Text и CDATASection </b>

<b>      s += child.nodeValue;</b>

<b>    else if (type === 1) // Рекурсивный обход узлов типа Element</b>

<b>      s += textContent(child);</b>

<b>  }</b>

<b>  return s;</b>

<b>}</b>

Свойство

<b>nodeValue</b>
доступно для чтения и записи, и с его помощью можно изменять содержимое в отображаемых узлах
<b>Text</b>
и
<b>CDATASection</b>
. Оба типа,
<b>Text</b>
и
<b>CDATASection</b>
, являются подтипами класса
<b>CharacterData</b>
, описание которого приводится в четвертой части книги. Класс
<b>CharacterData</b>
определяет свойство
<b>data</b>
, которое хранит тот же текст, что и свойство
<b>nodeValue</b>
. Следующая функция преобразует символы текстового содержимого узлов типа
<b>Text</b>
в верхний регистр, устанавливая значение свойства
<b>data</b>
:

<b>// Рекурсивно преобразует символы всех текстовых узлов-потомков </b>

<b>// элемента n в верхний регистр, </b>

<b>function upcase(n) {</b>

<b>  if (п.nodeType == 3 || n.nodeType == 4) // Если n - объект Text или CDATA </b>

<b>    n.data = n.data.toUpperCase(); // преобразовать в верхний регистр </b>

<b>  else // Иначе рекурсия по дочерним узлам</b>