Книга: JavaScript. Подробное руководство, 6-е издание
15.5.3. Содержимое элемента в виде текстовых узлов
15.5.3. Содержимое элемента в виде текстовых узлов
Еще одним средством доступа к содержимому элемента является список дочерних узлов, каждый из которых может иметь свое множество дочерних узлов. Когда речь заходит о содержимом элемента, наибольший интерес обычно представляют текстовые узлы. При работе с XML-документами необходимо также быть готовыми встретить узлы CDATASection
- подтип класса Text
- представляющие содержимое разделов CDATA
.
Пример 15.3 демонстрирует функцию textContent(),
которая выполняет рекурсивный обход дочерних элементов и объединяет текст, содержащийся во всех текстовых узлах-потомках. Чтобы было более понятно, напомню, что свойство nodeValue
(определяемое типом Node
) хранит содержимое текстового узла.
Пример 15.3. Поиск всех текстовых узлов, потомков указанного элемента
// Возвращает простое текстовое содержимое элемента е, выполняя рекурсивный
// обход всех дочерних элементов. Этот метод действует подобно свойству textContent
function textContent(e) {
var child, type, s = // s хранит текст всех дочерних узлов
fог(child = е.firstChild; child != null; child = child.nextSibling) {
type = child.nodeType;
if (type === 3 || type === 4) // Узлы типов Text и CDATASection
s += child.nodeValue;
else if (type === 1) // Рекурсивный обход узлов типа Element
s += textContent(child);
}
return s;
}
Свойство nodeValue
доступно для чтения и записи, и с его помощью можно изменять содержимое в отображаемых узлах Text
и CDATASection
. Оба типа, Text
и CDATASection
, являются подтипами класса CharacterData
, описание которого приводится в четвертой части книги. Класс CharacterData
определяет свойство data
, которое хранит тот же текст, что и свойство nodeValue
. Следующая функция преобразует символы текстового содержимого узлов типа Text
в верхний регистр, устанавливая значение свойства data
:
// Рекурсивно преобразует символы всех текстовых узлов-потомков
// элемента n в верхний регистр,
function upcase(n) {
if (п.nodeType == 3 || n.nodeType == 4) // Если n - объект Text или CDATA
n.data = n.data.toUpperCase(); // преобразовать в верхний регистр
else // Иначе рекурсия по дочерним узлам
for(var і = 0; і < n.childNodes.length; i++) upcase(n.childNodes[і]);
}
Класс CharacterData
также определяет редко используемые методы добавления в конец, удаления, вставки и замены текста в узлах Text
или CDATASection
. Кроме изменения содержимого имеющихся текстовых узлов этот класс позволяет также вставлять в элементы Element
новые текстовые узлы или замещать существующие текстовые узлы новыми. Создание, вставка и удаление узлов - тема следующего раздела.
- 15.5. Содержимое элемента
- 9.4.1. Реализация графа в виде матрицы смежности
- Глава 15 Редактирование музыки и видео
- Операции с множествами узлов
- 6.8. Разгон видеокарты на Windows 10
- Письма с элементами графики и вложениями
- Видеопамять
- Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста
- Удаление шаблонов узлов STP
- Создание узлов
- Управление объединением содержимого узлов
- Использование представления в виде таблицы данных