Возвращает элемент по идентификатору.
Синтаксис
ПолучитьЭлементПоИдентификатору(<Идентификатор>)Полное описание, параметры и ограничения
ДокументHTML.ПолучитьЭлементПоИдентификатору (HTMLDocument.GetElementById)
ДокументHTML (HTMLDocument)
ПолучитьЭлементПоИдентификатору (GetElementById)
Доступен, начиная с версии 8.2.
Синтаксис:
ПолучитьЭлементПоИдентификатору(<Идентификатор>)
Параметры:
<Идентификатор> (обязательный)
Тип: Строка.
Идентификатор искомого элемента.
Возвращаемое значение:
Тип: ЭлементHTML, Неопределено.
Узел, у которого имеется атрибут со свойством ЯвляетсяИдентификатором, установленным в Истина.
Описание:
Возвращает элемент по идентификатору.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Изменить настоящий HTML-комментарий и проверить все 14 символов
Настоящий КомментарийHTML из своей строки проходит вставку, чтение фрагмента, замену, удаление и добавление данных. Проверяем B-02 проверено, размер 14 и неизменный видимый текст.
Где и как запускать
Сервер; полный неглобальный непривилегированный общий модуль HTMLПометка85. Только собственная строка и память.
Подготовка
Будущий ручной опыт выполняйте в своей новой пустой учебной конфигурации на платформе 8.5.1.1343, в толстом управляемом клиенте. Здесь создаётся только собственное дерево из фиксированной строки в памяти; файлы, Интернет и объекты рабочей базы не используются.
Общие → Общие модули → создать HTMLПометка85. Сервер=Да; Глобальный=Нет; Привилегированный=Нет; Вызов сервера=Нет; оба клиентских флага=Нет; Внешнее соединение=Нет; повторное использование возвращаемых значений — Не использовать. Основной блок вставьте целиком в пустой модуль.
Общие → Общие формы → создать управляемую форму HTMLПометка85. Добавьте реквизит Результат85: Строка неограниченной длины; выведите многострочным полем только для чтения. Создайте команду Проверить85, Действие=Проверить85, выведите её кнопку.
У формы задайте АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это два различных перечисления, не Булево. Не создавайте обработчики сохранения.
Второй блок — целый модуль формы HTMLПометка85. Третий — целый модуль общей команды ОткрытьHTMLПометка85 без параметра. Общую команду включите в командный интерфейс собственной учебной подсистемы. Штатные параметры обоих обработчиков передаёт платформа; вручную их не вызывайте.
Обновите конфигурацию собственной учебной базы, откройте форму общей командой и нажмите Проверить85. Разбор и изменения своих узлов выполняются на сервере; клиент получает только строку проверенного результата.
Специальные HTML-классы старого DOM и часть операций не рекомендуются начиная с 8.2. Это узкий урок сопровождения старого кода, не способ управлять браузером и не рекомендация для нового веб-интерфейса.
Этот код в 1С ещё не компилировался и не выполнялся. Неверный фактический тип, форма дерева, отказ операции или исключение означают остановку; сообщение об остановке не является успешным примером.
Функция ПрочитатьСвоюСтроку85(СтрокаHTML85)
Чтение = Новый ЧтениеHTML;
Если ТипЗнч(Чтение) <> Тип("ЧтениеHTML") Тогда
ВызватьИсключение "Не создано настоящее ЧтениеHTML";
КонецЕсли;
Попытка
Чтение.УстановитьСтроку(СтрокаHTML85);
Построитель = Новый ПостроительDOM;
Если ТипЗнч(Построитель) <> Тип("ПостроительDOM") Тогда
ВызватьИсключение "Не создан настоящий ПостроительDOM";
КонецЕсли;
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Документ) <> Тип("ДокументHTML") Тогда
ВызватьИсключение "Не получен настоящий ДокументHTML";
КонецЕсли;
Возврат Документ;
КонецФункции
Функция НайтиСвойБлок85(Документ, Идентификатор85)
Блок85 = Документ.ПолучитьЭлементПоИдентификатору(Идентификатор85);
Если Блок85 = Неопределено Тогда
ВызватьИсключение "В своей строке не найден нужный div";
КонецЕсли;
Если ТипЗнч(Блок85) <> Тип("ЭлементБлокHTML")
Или Блок85.ДокументВладелец <> Документ Тогда
ВызватьИсключение "Нужен настоящий собственный ЭлементБлокHTML";
КонецЕсли;
Возврат Блок85;
КонецФункции
Функция Проверить85() Экспорт
Документ = ПрочитатьСвоюСтроку85("<html><head><title>Своя пометка</title></head><body><div id='comment85'><!--A-01--></div><div id='commentSentinel85'>Заказ A-01, количество 3</div></body></html>");
Блок85 = НайтиСвойБлок85(Документ, "comment85");
Контроль85 = НайтиСвойБлок85(Документ, "commentSentinel85");
Узлы85 = Блок85.ДочерниеУзлы;
Если ТипЗнч(Узлы85) <> Тип("СписокУзловHTML")
Или ТипЗнч(Узлы85.Количество()) <> Тип("Число")
Или Узлы85.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один настоящий дочерний HTML-комментарий";
КонецЕсли;
Пометка = Узлы85.Элемент(0);
Если ТипЗнч(Пометка) <> Тип("КомментарийHTML")
Или ТипЗнч(Пометка.Данные) <> Тип("Строка") Или Пометка.Данные <> "A-01"
Или ТипЗнч(Пометка.Размер) <> Тип("Число") Или Пометка.Размер <> 4
Или Пометка.ДокументВладелец <> Документ Тогда
ВызватьИсключение "Не получена собственная настоящая пометка A-01";
КонецЕсли;
КонтрольДо85 = Контроль85.ТекстовоеСодержимое;
Если ТипЗнч(КонтрольДо85) <> Тип("Строка") Или КонтрольДо85 <> "Заказ A-01, количество 3" Тогда
ВызватьИсключение "Не получен контроль видимого текста";
КонецЕсли;
Пометка.ВставитьДанные(4, "!");
Фрагмент85 = Пометка.ВыбратьДанные(0, 4);
Если ТипЗнч(Фрагмент85) <> Тип("Строка") Или Фрагмент85 <> "A-01"
Или Пометка.Данные <> "A-01!" Тогда
ВызватьИсключение "Вставка и реальное чтение фрагмента не подтверждены";
КонецЕсли;
Пометка.ЗаменитьДанные(0, 4, "B-02");
Пометка.УдалитьДанные(4, 1);
Пометка.ДобавитьДанные(" проверено");
Если ТипЗнч(Пометка.Данные) <> Тип("Строка") Или Пометка.Данные <> "B-02 проверено"
Или ТипЗнч(Пометка.Размер) <> Тип("Число") Или Не (Пометка.Размер = 14) Тогда
ВызватьИсключение "Не получена фактическая пометка из 14 символов";
КонецЕсли;
Если Блок85.ДочерниеУзлы.Количество() <> 1
Или Блок85.ДочерниеУзлы.Элемент(0) <> Пометка
Или Пометка.ДокументВладелец <> Документ
Или Контроль85.ТекстовоеСодержимое <> КонтрольДо85 Тогда
ВызватьИсключение "Изменение пометки затронуло не своё содержимое";
КонецЕсли;
Возврат "Пометка: " + Пометка.Данные + "; символов: " + Строка(Пометка.Размер)
+ ". Видимый контроль: " + Контроль85.ТекстовоеСодержимое;
КонецФункцииЦелый модуль своей управляемой формы HTMLПометка85
Общие → Общие формы → HTMLПометка85 → пустой модуль. Вставить целиком; Результат85 — строка; Действие команды Проверить85 связано с обработчиком.
Клиент — настоящий обработчик команды; сервер — ПолучитьПротокол85НаСервере. По границе передаётся только строка.
&НаКлиенте
Процедура Проверить85(Команда)
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Проверить85" Тогда
ВызватьИсключение "Нажмите настоящую собственную кнопку проверки";
КонецЕсли;
Результат85 = "";
Попытка
Получено85 = ПолучитьПротокол85НаСервере();
Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
ВызватьИсключение "Сервер не вернул полный строковый протокол";
КонецЕсли;
Результат85 = Получено85;
Исключение
Результат85 = "Проверка НЕ завершена. Опыт остановлен.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ПолучитьПротокол85НаСервере()
Если ИмяФормы <> "ОбщаяФорма.HTMLПометка85"
Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
ВызватьИсключение "Нужна своя форма с отключённым сохранением данных";
КонецЕсли;
Отчет85 = HTMLПометка85.Проверить85();
Если ТипЗнч(Отчет85) <> Тип("Строка") Или Отчет85 = "" Тогда
ВызватьИсключение "Собственный модуль не вернул полный протокол";
КонецЕсли;
Возврат Отчет85;
КонецФункцииЦелый модуль своей общей команды ОткрытьHTMLПометка85
Общие → Общие команды → ОткрытьHTMLПометка85 → пустой модуль. Без параметра; включить в собственный командный интерфейс.
Толстый управляемый клиент, &НаКлиенте. Настоящий ОбработкаКоманды с двумя штатными параметрами.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Если ПараметрКоманды <> Неопределено
Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Откройте свою форму штатной общей командой без параметра";
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.HTMLПометка85");
#Иначе
ВызватьИсключение "Нужен толстый управляемый клиент";
#КонецЕсли
КонецПроцедурыРазбор по шагам
В собственной строке служебная пометка <!--A-01--> — отдельный ребёнок div. Она получается из настоящего HTML-списка, а не из СоздатьКомментарий, у которого установленная справка объявляет КомментарийDOM.
Перед специальными методами проверяются фактический КомментарийHTML, строка A-01, размер 4, число детей и документ-владелец. Отдельно запоминается видимый контроль заказа.
ВставитьДанные(4,"!") добавляет знак после четырёх символов. ВыбратьДанные(0,4) возвращает реальную строку A-01; проверяется и полный промежуточный текст A-01!.
ЗаменитьДанные(0,4,"B-02") заменяет код; УдалитьДанные(4,1) удаляет знак; ДобавитьДанные(" проверено") дописывает собственное слово. Изменяющие методы вызываются как процедуры, без присваивания их результата.
Повторное чтение Данные и Размер подтверждает B-02 проверено и 14 символов. РодительскийУзел прикреплённой пометки с div не сравнивается: объявленный тип этого свойства не доказывает такой переход.
Проверяются неизменные ребёнок, документ-владелец и видимый контроль. Только фактические прочитанные значения входят в итоговую строку.
Как проверить результат
Первый будущий запуск: прочитан фрагмент A-01, конечные данные B-02 проверено, настоящий размер 14 и неизменный видимый контроль заказа.
В своём отладчике проверьте смещения по символам: позиции начинаются с нуля; 4 означает место после A-01. ВыбратьДанные действительно возвращает строку, остальные четыре операции изменяют объект.
Только в собственной учебной копии замените комментарий текстом или меняйте контроль: ожидается остановка, а не работа методов по объекту другого класса.
Не проверяйте результат визуализацией внешнего сайта: комментарий — данные собственного дерева. Код не открывает браузер, не сохраняет HTML и не меняет бизнес-объекты.
Ожидаемый результат
При полном успешном контроле: фактическая пометка B-02 проверено, фактический размер 14 и неизменный видимый контроль заказа.
На что обратить внимание
Модель создаётся только из собственной фиксированной строки. Нельзя подставлять внешний документ, объект пользователя, файл, URL или рабочие данные и считать этот пример проверкой их безопасности.
Установленная 8.5.1.1343 объявляет СоздатьКомментарий → КомментарийDOM и СоздатьТекстовыйУзел → ТекстDOM. Они не служат доказательством специальных HTML-получателей. Здесь реальные специальные узлы происходят из собственного HTMLReader/DOMBuilder и проверяются.
Общий возвращаемый HTML-тип не обещает конкретный класс в любой среде. Несовпадение фактического типа/формы означает остановку и неподтверждённый опыт, не успешный обход ошибки.
Не переносите правила имён, соседей и пространств имён из W3C по памяти. Сохраняются точные объявленные локальные контракты и реальные наблюдения; данные узлов не приводятся к другому классу.
Чтение закрывается на нормальном пути и в обработчике ошибки; исключение повторно вызывается. Ошибка самого закрытия тоже останавливает опыт: успешная очистка при любом отказе не обещается.
Нативные тексты справки и существующие конфигурационные образцы не исправлялись. Компилятор и 1С во время подготовки не запускались; статические проверки не являются выполнением примера.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Переименовать собственный атрибут, используя результат операции
Переименовываем 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-интерфейс не позволяет без проверки вызывать специальные свойства атрибута результата.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.