Узел элемента HTML документа.
Полное описание, параметры и ограничения
ЭлементHTML (HTMLElement)
ЭлементHTML (HTMLElement)
Доступен, начиная с версии 8.2.
Свойства:
Атрибуты (Attributes)
ДокументВладелец (OwnerDocument)
ДочерниеУзлы (ChildNodes)
ЗначениеУзла (NodeValue)
ИмяУзла (NodeName)
ЛокальноеИмя (LocalName)
ПервыйДочерний (FirstChild)
ПоследнийДочерний (LastChild)
ПредыдущийСоседний (PreviousSibling)
Префикс (Prefix)
РодительскийУзел (ParentNode)
СледующийСоседний (NextSibling)
ТекстовоеСодержимое (TextContent)
ТипУзла (NodeType)
ИмяЭлемента (TagName)
Методы:
ВставитьПеред (InsertBefore)
ДобавитьДочерний (AppendChild)
ЕстьАтрибуты (HasAttributes)
ЕстьДочерниеУзлы (HasChildNodes)
ЗаменитьДочерний (ReplaceChild)
КлонироватьУзел (CloneNode)
Нормализовать (Normalize)
ПолучитьПользовательскиеДанные (GetUserData)
СравнитьПозициюВДокументе (CompareDocumentPosition)
УдалитьДочерний (RemoveChild)
УзелИдентичен (IsSameNode)
УзелРавен (IsEqualNode)
УстановитьПользовательскиеДанные (SetUserData)
ЕстьАтрибут (HasAttribute)
ПолучитьАтрибут (GetAttribute)
ПолучитьУзелАтрибута (GetAttributeNode)
ПолучитьЭлементыПоИмени (GetElementByTagName)
УдалитьАтрибут (RemoveAttribute)
УдалитьУзелАтрибута (RemoveAttributeNode)
УстановитьАтрибут (SetAttribute)
УстановитьАтрибутИдентификатор (SetIdAttribute)
УстановитьУзелАтрибута (SetAttributeNode)
УстановитьУзелАтрибутаИдентификатора (SetIdAttributeNode)
Описание:
Узел элемента HTML документа.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
АтрибутHTML, свойство ЭлементВладелец
ДокументHTML, свойство ЭлементДокумента
ДокументHTML, метод СоздатьЭлемент
ЭлементТаблицаHTML, метод СоздатьЗаголовокТаблицы
ЭлементТаблицаHTML, метод СоздатьПодвалТаблицы
ЭлементТаблицаHTML, метод СоздатьЗаголовок
ЭлементТаблицаHTML, метод ВставитьСтроку
ЭлементСтрокаТаблицыHTML, метод ВставитьЯчейку
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Переименовать собственный атрибут, используя результат операции
Переименовываем data-old в data-guide. Справка допускает замену исходного узла новым, поэтому не полагаемся на старую ссылку.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.
Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.
Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.
Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.
HTML = "<html><head><title>Учебный заказ</title><meta id='meta' name='description' content='Вымышленный заказ'></head>
|<body id='body'><p id='note'>Заказ существует только в памяти</p><pre id='code'>A-01: 3
|B-02: 1</pre>
|<form id='order' name='order' action='' method='get'>
|<input id='customer' name='customer' type='text' value='Учебный покупатель'>
|<input id='accepted' name='accepted' type='checkbox' value='yes'>
|<button id='preview' name='preview' type='button' value='preview'>Предпросмотр</button></form>
|<table id='items' summary='Книга и ручка'><caption id='caption'>Товары</caption><colgroup><col id='column'></colgroup><tbody>
|<tr id='book'><td id='book-name'>Книга</td><td>3</td></tr><tr id='pen'><td>Ручка</td><td>1</td></tr>
|</tbody></table><a id='help' name='help' href='#note'>Пояснение</a><img id='logo' alt='Учебная картинка без источника'>
|</body></html>";
Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(HTML);
Попытка
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
ВызватьИсключение "Ожидался ДокументHTML, а не XML-документ";
КонецЕсли;
Форма = Документ.ПолучитьЭлементПоИдентификатору("order");
Если Форма = Неопределено Тогда
ВызватьИсключение "Не найден учебный элемент order";
КонецЕсли;
Если ТипЗнч(Форма) <> Тип("ЭлементФормаHTML") Тогда
ВызватьИсключение "Неожиданный тип учебного элемента order";
КонецЕсли;
Блок = Документ.СоздатьЭлемент("guide-section");
Если ТипЗнч(Блок) <> Тип("ЭлементHTML") Тогда
ВызватьИсключение "Учебный контейнер должен иметь общий тип ЭлементHTML";
КонецЕсли;
Форма.ДобавитьДочерний(Блок);
Атрибут = Документ.СоздатьАтрибут("data-old");
Атрибут.Значение = "A-01";
Блок.УстановитьУзелАтрибута(Атрибут);
Результат = Документ.ПереименоватьУзел(Атрибут, "data-guide");
Если Результат = Неопределено Тогда
ВызватьИсключение "После переименования ожидается актуальный узел";
КонецЕсли;
Сообщить(Результат.ИмяУзла = "data-guide");
Сообщить(Блок.ЕстьАтрибут("data-guide"));
Сообщить(Не Блок.ЕстьАтрибут("data-old"));
Сообщить(Блок.ПолучитьАтрибут("data-guide") = "A-01");Разбор по шагам
Создаём и прикрепляем только собственный атрибут с допустимым XML-именем.
Результат метода — актуальный узел; исходный объект мог быть заменён.
Проверяем новое имя, отсутствие старого и сохранённое строковое значение.
Как проверить результат
Четыре сравнения Истина: новое имя, наличие нового, отсутствие старого и значение A-01.
Текст заказа и исходные id не должны измениться.
Ожидаемый результат
Переименование проверено по актуальному дереву, не по предположению об идентичности.
На что обратить внимание
Не переименовывайте исходный id внешнего документа без проверки ссылок на него.
Общий возвращаемый DOM-интерфейс не позволяет без проверки вызывать специальные свойства атрибута результата.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Нормализовать соседние текстовые узлы собственного HTML-документа
У собственного блока создаём два соседних текста Книга и « и ручка». Нормализовать на уровне документа объединяет их, сохраняя полное текстовое содержимое.
Где и как запускать
Полный серверный общий модуль УчебныйДокументHTML85. Свой HTML создаётся строкой и разбирается в памяти, без браузера и внешних источников.
Подготовка
Используйте отдельную учебную базу 8.5.1.1343. Создайте общий модуль УчебныйДокументHTML85: Сервер — Да, Клиент — Нет, Глобальный — Нет, Вызов сервера — Нет, Привилегированный — Нет.
Вставьте весь приведённый модуль одного урока. В своей управляемой учебной обработке создайте команду и клиентский обработчик, вызывающий свою процедуру с директивой &НаСервереБезКонтекста. В её тело вставьте УчебныйДокументHTML85.ВыполнитьПример();.
Источник HTML полностью записан в коде: свой вымышленный заказ, покупатель, книга, ручка и элементы с явно заданными id. ЧтениеHTML и ПостроительDOM получают строку, а не URL или внешний файл.
Разбор HTML в этом уроке не открывает браузер, не отправляет форму, не загружает картинки и не исполняет JavaScript. Файлы, сеть, печать, рабочие документы и регистры не используются.
Каждый запуск создаёт новый собственный документ в памяти. Поставьте точку останова перед конечными Сообщить и исследуйте Документ, его ЭлементДокумента и указанные переменные урока в серверном отладчике.
ДокументHTML — корневой объект дерева, а его ЭлементДокумента, Тело и отдельный блок — другие узлы. Одинаковые имена методов не означают одинаковые правила допустимых дочерних узлов.
Результаты ниже ожидаемые. В 1С код не запускался; статическая сверка сигнатур и readonly не подтверждает все особенности реализации HTML DOM вашей среды. Выполните проверки только на своём учебном стенде.
Процедура ВыполнитьПример() Экспорт
HTML = "<html><head><title>Учебный заказ</title><meta id='meta' name='description' content='Вымышленный заказ'></head>
|<body id='body'><p id='note'>Заказ существует только в памяти</p><pre id='code'>A-01: 3
|B-02: 1</pre>
|<form id='order' name='order' action='' method='get'>
|<input id='customer' name='customer' type='text' value='Учебный покупатель'>
|<input id='accepted' name='accepted' type='checkbox' value='yes'>
|<button id='preview' name='preview' type='button' value='preview'>Предпросмотр</button></form>
|<table id='items' summary='Книга и ручка'><caption id='caption'>Товары</caption><colgroup><col id='column'></colgroup><tbody>
|<tr id='book'><td id='book-name'>Книга</td><td>3</td></tr><tr id='pen'><td>Ручка</td><td>1</td></tr>
|</tbody></table><a id='help' name='help' href='#note'>Пояснение</a><img id='logo' alt='Учебная картинка без источника'>
|</body></html>";
Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(HTML);
Попытка
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
ВызватьИсключение "Ожидался ДокументHTML, а не XML-документ";
КонецЕсли;
Форма = Документ.ПолучитьЭлементПоИдентификатору("order");
Если Форма = Неопределено Тогда
ВызватьИсключение "В своём HTML нужна форма order";
КонецЕсли;
Если ТипЗнч(Форма) <> Тип("ЭлементФормаHTML") Тогда
ВызватьИсключение "order должен быть собственной HTML-формой";
КонецЕсли;
Блок = Документ.СоздатьЭлемент("div");
Блок.УстановитьАтрибут("id", "own-work");
Форма.ДобавитьДочерний(Блок);
ПервыйТекст = Документ.СоздатьТекстовыйУзел("Книга");
ВторойТекст = Документ.СоздатьТекстовыйУзел(" и ручка");
Блок.ДобавитьДочерний(ПервыйТекст);
Блок.ДобавитьДочерний(ВторойТекст);
Если Блок.ДочерниеУзлы.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались два собственных соседних текста";
КонецЕсли;
До = Блок.ТекстовоеСодержимое;
Документ.Нормализовать();
Сообщить(До = "Книга и ручка");
Сообщить(Блок.ТекстовоеСодержимое = До);
Сообщить(Блок.ДочерниеУзлы.Количество() = 1);
Сообщить(Блок.ПервыйДочерний.ЗначениеУзла = "Книга и ручка");
КонецПроцедурыРазбор по шагам
Разобрать свою строку заказа и проверить реальный ТипЗнч ДокументHTML. Чтение закрывается как после успеха, так и при исключении построителя.
Найти и проверить собственную форму order, создать блок div в том же документе и добавить его в эту форму. Это правка своего дерева в памяти, не страницы открытого браузера.
Создать два текстовых узла через фабрику документа. Их строки задаются явно, поэтому исходное полное содержимое известно: Книга и ручка.
Добавить оба текста в один блок и проверить число детей 2. Они соседние; между ними нет элемента или другого разделяющего узла.
Сохранить полное текстовое содержимое до нормализации. Затем вызвать Нормализовать именно у ДокументHTML, чтобы обработать поддерево на всей глубине.
Проверить число детей 1 и сохранение текста. Нормализация структуры не означает исчезновение второй части надписи.
После нормализации пользоваться актуальными узлами из Блок.ДочерниеУзлы. Старая переменная ВторойТекст не гарантирует, что узел по-прежнему прикреплён к блоку.
Как проверить результат
Четыре конечных сравнения должны дать Истина. Дочерних текстов стало один, надпись остаётся Книга и ручка.
Вставьте между текстами свой элемент span: смежность нарушится. Нормализовать не обязано объединять тексты через этот элемент.
Повторный вызов Нормализовать не должен менять нормализованную надпись. Не проверяйте сохранение идентичности второго исходного узла.
Ожидаемый результат
Соседние тексты собственного блока объединены на уровне документа с проверкой сохранности содержимого.
На что обратить внимание
Нормализация не является очисткой HTML от опасных тегов и не выполняет повторный разбор текстовой строки как разметки.
Readonly ДочерниеУзлы нельзя присваивать заново. Меняем дерево методами, а не подменой коллекции.
Создание текстового узла и создание элемента — разные операции; слово Книга здесь текст, не тег.
Проверки нужно выполнить в своей 1С; этот урок не запускался.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.