Список элементов DOM.
Полное описание, параметры и ограничения
СписокЭлементовDOM (DOMElementList)
СписокЭлементовDOM (DOMElementList)
Доступен, начиная с версии 8.1.
Элементы коллекции:
ЭлементHTML, ЭлементТелоHTML, ЭлементКартинкаHTML, ЭлементСвязьHTML, ЭлементЯкорьHTML, ЭлементФормаHTML, ЭлементАплетHTML, ЭлементКнопкаHTML, ЭлементВводаHTML, ЭлементЗаголовокHTML, ЭлементРазметкаHTML, ЭлементПлавающийФреймHTML, ЭлементВставкаHTML, ЭлементФреймHTML, ЭлементНаборФреймовHTML, ЭлементМетаHTML, ЭлементОбъектHTML, ЭлементСкриптHTML, ЭлементТаблицаHTML, ЭлементСтрокаТаблицыHTML, ЭлементЯчейкаТаблицыHTML, ЭлементКолонкаТаблицыHTML, ЭлементЗаголовокТаблицыHTML, ЭлементБлокHTML, ЭлементЛинияHTML, ЭлементФорматированногоТекстаHTML
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются узел DOM.
Возможно обращение к узлам DOM посредством оператора [...]. В качестве аргумента передается индекс узла DOM (нумерация с 0).
Методы:
Количество (Count)
Элемент (Item)
Описание:
Список элементов DOM.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
АтрибутDOM, свойство ДочерниеУзлы
ДокументDOM, свойство ДочерниеУзлы
ЭлементDOM, свойство ДочерниеУзлы
ОпределениеТипаДокументаDOM, свойство ДочерниеУзлы
НотацияDOM, свойство ДочерниеУзлы
СущностьDOM, свойство ДочерниеУзлы
ФрагментДокументаDOM, свойство ДочерниеУзлы
ТекстDOM, свойство ДочерниеУзлы
КомментарийDOM, свойство ДочерниеУзлы
СекцияCDATADOM, свойство ДочерниеУзлы
ИнструкцияОбработкиDOM, свойство ДочерниеУзлы
СсылкаНаСущностьDOM, свойство ДочерниеУзлы
ПространствоИменXPath, свойство ДочерниеУзлы
ЭлементDOM, метод ПолучитьЭлементыПоИмени
ДокументDOM, метод ПолучитьЭлементыПоИмени
Использование в версии:
Доступен, начиная с версии 8.1.
Описание изменено в версии 8.3.27.
Методическая информация
Практические примеры
Поиск потомков не равен поиску самого элемента
Созданный пустой элемент не имеет потомков с собственным именем. СписокЭлементовDOM возвращается даже при отсутствии результата.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте учебную базу платформы 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-документ";
КонецЕсли;
Ожидаемые = Новый Соответствие;
Ожидаемые.Вставить("guide-section", "ЭлементHTML");
Ожидаемые.Вставить("div", "ЭлементБлокHTML");
Ожидаемые.Вставить("pre", "ЭлементФорматированногоТекстаHTML");
Ожидаемые.Вставить("form", "ЭлементФормаHTML");
Ожидаемые.Вставить("input", "ЭлементВводаHTML");
Ожидаемые.Вставить("button", "ЭлементКнопкаHTML");
Ожидаемые.Вставить("table", "ЭлементТаблицаHTML");
Ожидаемые.Вставить("tr", "ЭлементСтрокаТаблицыHTML");
Ожидаемые.Вставить("td", "ЭлементЯчейкаТаблицыHTML");
Ожидаемые.Вставить("col", "ЭлементКолонкаТаблицыHTML");
Ожидаемые.Вставить("caption", "ЭлементЗаголовокТаблицыHTML");
Ожидаемые.Вставить("a", "ЭлементЯкорьHTML");
Ожидаемые.Вставить("img", "ЭлементКартинкаHTML");
Ожидаемые.Вставить("meta", "ЭлементМетаHTML");
Ожидаемые.Вставить("link", "ЭлементСвязьHTML");
Ожидаемые.Вставить("head", "ЭлементЗаголовокHTML");
Ожидаемые.Вставить("html", "ЭлементРазметкаHTML");
Ожидаемые.Вставить("hr", "ЭлементЛинияHTML");
Ожидаемые.Вставить("script", "ЭлементСкриптHTML");
Ожидаемые.Вставить("iframe", "ЭлементПлавающийФреймHTML");
Ожидаемые.Вставить("frame", "ЭлементФреймHTML");
Ожидаемые.Вставить("frameset", "ЭлементНаборФреймовHTML");
Ожидаемые.Вставить("embed", "ЭлементВставкаHTML");
Ожидаемые.Вставить("object", "ЭлементОбъектHTML");
Ожидаемые.Вставить("applet", "ЭлементАплетHTML");
Для Каждого Пара Из Ожидаемые Цикл
Узел = Документ.СоздатьЭлемент(Пара.Ключ);
Если ТипЗнч(Узел) <> Тип(Пара.Значение) Тогда
ВызватьИсключение "Фактический тип фабрики отличается для " + Пара.Ключ;
КонецЕсли;
Потомки = Узел.ПолучитьЭлементыПоИмени(Пара.Ключ);
Сообщить(ТипЗнч(Потомки) = Тип("СписокЭлементовDOM"));
Сообщить(Потомки.Количество() = 0);
Сообщить(Не Узел.ЕстьДочерниеУзлы());
КонецЦикла;Разбор по шагам
Узел уже существует, но отсоединён и пуст: задаём его же тег в поиске.
ПолучитьЭлементыПоИмени ищет потомков, поэтому не должен вернуть корень как собственный результат.
Перед обращением к Элемент(0) всегда нужна проверка количества; здесь ноль и индекс не используем.
Как проверить результат
Три сравнения для каждого элемента Истина: правильный тип списка, ноль совпадений и отсутствие детей.
Само наличие переменной Узел не означает, что коллекция его потомков заполнена.
Ожидаемый результат
Разобран отрицательный результат поиска без ошибки индекса.
На что обратить внимание
Полученная коллекция не является КоллекцияЭлементовHTML: сверяйте конкретный возвращаемый тип.
Поиск потомков отличается от Документ.ПолучитьЭлементПоИдентификатору.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разобрать корневую разметку HTML и элемент head
ЭлементРазметкаHTML отвечает за html, ЭлементЗаголовокHTML — за head. Это не строковый Заголовок документа и не HTTP-заголовки.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте учебную базу платформы 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-документ";
КонецЕсли;
Корень = Документ.ЭлементДокумента;
Если Корень = Неопределено Тогда
ВызватьИсключение "Не получен html собственной строки";
КонецЕсли;
Если ТипЗнч(Корень) <> Тип("ЭлементРазметкаHTML") Тогда
ВызватьИсключение "Проверьте специальный тип html";
КонецЕсли;
Заголовки = Документ.ПолучитьЭлементыПоИмени("head");
Если Заголовки.Количество() <> 1 Тогда
ВызватьИсключение "В учебной строке должен быть один head";
КонецЕсли;
Заголовок = Заголовки.Элемент(0);
Если ТипЗнч(Заголовок) <> Тип("ЭлементЗаголовокHTML") Тогда
ВызватьИсключение "Проверьте специальный тип head";
КонецЕсли;
Корень.Версия = "";
Заголовок.Профиль = "";
Сообщить(Корень.Версия = "");
Сообщить(Заголовок.Профиль = "");
Сообщить(Документ.Заголовок = "Учебный заказ");
Сообщить(Заголовок.ПолучитьЭлементыПоИмени("meta").Количество() = 1);Разбор по шагам
Корневой элемент получаем из документа, а head из списка по имени с проверкой количества.
Перед специальными Версия и Профиль проверяем типы.
Пустой Профиль не задаёт внешнего ресурса; заголовок title остаётся Учебный заказ.
Как проверить результат
Четыре проверки Истина: два пустых атрибута, прежний title и один meta внутри head.
Не отправляется HTTP-запрос и не настраивается заголовок ответа сервера.
Ожидаемый результат
Разделены документ, корневой элемент, head и текст title.
На что обратить внимание
Версия html не изменяет версию платформы 1С.
Профиль head не является профилем прав или ПрофилемБезопасности.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.