ЭлементHTML.ЕстьАтрибут

Методы · HasAttribute

Определяет наличие атрибута с указанным именем в данном элементе.

Синтаксис

ЕстьАтрибут(<Имя>)
Полное описание, параметры и ограничения

ЭлементHTML.ЕстьАтрибут (HTMLElement.HasAttribute)

ЭлементHTML (HTMLElement)

ЕстьАтрибут (HasAttribute)

Доступен, начиная с версии 8.2.

Синтаксис:
ЕстьАтрибут(<Имя>)
Параметры:

<Имя> (обязательный)
Тип: Строка.
Имя атрибута.
Возвращаемое значение:
Тип: Булево.
Истина, если атрибут с указанным именем явно присутствует в элементе, или имеет значение по умолчанию; Ложь - в противном случае.
Описание:

Определяет наличие атрибута с указанным именем в данном элементе.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Переименовать собственный атрибут, используя результат операции

Переименовываем data-old в data-guide. Справка допускает замену исходного узла новым, поэтому не полагаемся на старую ссылку.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

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");

Разбор по шагам

  1. Создаём и прикрепляем только собственный атрибут с допустимым XML-именем.

  2. Результат метода — актуальный узел; исходный объект мог быть заменён.

  3. Проверяем новое имя, отсутствие старого и сохранённое строковое значение.

Как проверить результат

  1. Четыре сравнения Истина: новое имя, наличие нового, отсутствие старого и значение A-01.

  2. Текст заказа и исходные id не должны измениться.

Ожидаемый результат

Переименование проверено по актуальному дереву, не по предположению об идентичности.

На что обратить внимание

  1. Не переименовывайте исходный id внешнего документа без проверки ссылок на него.

  2. Общий возвращаемый DOM-интерфейс не позволяет без проверки вызывать специальные свойства атрибута результата.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Создать атрибут-узел и явно объявить его идентификатором

Обычная собственная метка не обязательно является id для поиска. Устанавливаем атрибут, затем явно назначаем роль идентификатора.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте учебную базу платформы 8.5.1.1343 и серверную процедуру учебного общего модуля. Каждый пример выполняйте отдельно.

  2. Все данные заказа вымышлены и находятся в строке. ЧтениеHTML разбирает данные, но не является браузером: форма не отправляется, ссылки не открываются, картинки не скачиваются.

  3. Никакие файлы, адреса сайтов, токены и документы информационной базы не нужны. Не заменяйте учебную строку произвольным внешним HTML без отдельной проверки безопасности.

  4. Индексы коллекций начинаются с нуля. Перед обращением к найденному узлу проверяйте Неопределено; перед специальными свойствами элемента проверяйте его тип.

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-guide-id");
Атрибут.Значение = "guide-note";
Блок.УстановитьУзелАтрибута(Атрибут);
Блок.УстановитьУзелАтрибутаИдентификатора(Атрибут, Истина);
Сообщить(Атрибут.Имя = "data-guide-id");
Сообщить(Атрибут.Указан);
Сообщить(Атрибут.ЯвляетсяИдентификатором);
Сообщить(Атрибут.ЭлементВладелец = Блок);
Сообщить(Документ.ПолучитьЭлементПоИдентификатору("guide-note") = Блок);
Блок.УдалитьУзелАтрибута(Атрибут);
Сообщить(Не Блок.ЕстьАтрибут("data-guide-id"));

Разбор по шагам

  1. СоздатьАтрибут создаёт отдельный узел, а не автоматически прикрепляет его к элементу.

  2. Устанавливаем строковое значение и прикрепляем атрибут к контейнеру.

  3. Отдельно объявляем атрибут идентификатором; не полагаемся на имя data-guide-id.

  4. Удаляем созданный атрибут-узел, сохраняя сам контейнер.

Как проверить результат

  1. Шесть сравнений дают Истина: имя, заданность, роль ID, владелец, поиск и отсутствие после удаления.

  2. Идентификаторы исходного заказа не менялись; guide-note уникален в собственном документе.

Ожидаемый результат

Разделены создание атрибута, прикрепление, роль ID и удаление.

На что обратить внимание

  1. Не объявляйте несколько одинаковых идентификаторов в одном документе.

  2. Служебный ID DOM не является внешним номером заказа.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.