СписокУзловHTML.Элемент

Методы · Item

Получает узел HTML по индексу.

Синтаксис

Элемент(<Индекс>)
Полное описание, параметры и ограничения

СписокУзловHTML.Элемент (HTMLNodeList.Item)

СписокУзловHTML (HTMLNodeList)

Элемент (Item)

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

Синтаксис:
Элемент(<Индекс>)
Параметры:

<Индекс> (обязательный)
Тип: Число.
Индекс узла 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, ЭлементФормаHTML, ДокументHTML, ТекстHTML, КомментарийHTML.

Описание:

Получает узел HTML по индексу.

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

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

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

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

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

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

Изменить настоящий HTML-комментарий и проверить все 14 символов

Настоящий КомментарийHTML из своей строки проходит вставку, чтение фрагмента, замену, удаление и добавление данных. Проверяем B-02 проверено, размер 14 и неизменный видимый текст.

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

Сервер; полный неглобальный непривилегированный общий модуль HTMLПометка85. Только собственная строка и память.

Подготовка

  1. Будущий ручной опыт выполняйте в своей новой пустой учебной конфигурации на платформе 8.5.1.1343, в толстом управляемом клиенте. Здесь создаётся только собственное дерево из фиксированной строки в памяти; файлы, Интернет и объекты рабочей базы не используются.

  2. Общие → Общие модули → создать HTMLПометка85. Сервер=Да; Глобальный=Нет; Привилегированный=Нет; Вызов сервера=Нет; оба клиентских флага=Нет; Внешнее соединение=Нет; повторное использование возвращаемых значений — Не использовать. Основной блок вставьте целиком в пустой модуль.

  3. Общие → Общие формы → создать управляемую форму HTMLПометка85. Добавьте реквизит Результат85: Строка неограниченной длины; выведите многострочным полем только для чтения. Создайте команду Проверить85, Действие=Проверить85, выведите её кнопку.

  4. У формы задайте АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это два различных перечисления, не Булево. Не создавайте обработчики сохранения.

  5. Второй блок — целый модуль формы HTMLПометка85. Третий — целый модуль общей команды ОткрытьHTMLПометка85 без параметра. Общую команду включите в командный интерфейс собственной учебной подсистемы. Штатные параметры обоих обработчиков передаёт платформа; вручную их не вызывайте.

  6. Обновите конфигурацию собственной учебной базы, откройте форму общей командой и нажмите Проверить85. Разбор и изменения своих узлов выполняются на сервере; клиент получает только строку проверенного результата.

  7. Специальные HTML-классы старого DOM и часть операций не рекомендуются начиная с 8.2. Это узкий урок сопровождения старого кода, не способ управлять браузером и не рекомендация для нового веб-интерфейса.

  8. Этот код в 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");
    #Иначе
        ВызватьИсключение "Нужен толстый управляемый клиент";
    #КонецЕсли
КонецПроцедуры

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

  1. В собственной строке служебная пометка <!--A-01--> — отдельный ребёнок div. Она получается из настоящего HTML-списка, а не из СоздатьКомментарий, у которого установленная справка объявляет КомментарийDOM.

  2. Перед специальными методами проверяются фактический КомментарийHTML, строка A-01, размер 4, число детей и документ-владелец. Отдельно запоминается видимый контроль заказа.

  3. ВставитьДанные(4,"!") добавляет знак после четырёх символов. ВыбратьДанные(0,4) возвращает реальную строку A-01; проверяется и полный промежуточный текст A-01!.

  4. ЗаменитьДанные(0,4,"B-02") заменяет код; УдалитьДанные(4,1) удаляет знак; ДобавитьДанные(" проверено") дописывает собственное слово. Изменяющие методы вызываются как процедуры, без присваивания их результата.

  5. Повторное чтение Данные и Размер подтверждает B-02 проверено и 14 символов. РодительскийУзел прикреплённой пометки с div не сравнивается: объявленный тип этого свойства не доказывает такой переход.

  6. Проверяются неизменные ребёнок, документ-владелец и видимый контроль. Только фактические прочитанные значения входят в итоговую строку.

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

  1. Первый будущий запуск: прочитан фрагмент A-01, конечные данные B-02 проверено, настоящий размер 14 и неизменный видимый контроль заказа.

  2. В своём отладчике проверьте смещения по символам: позиции начинаются с нуля; 4 означает место после A-01. ВыбратьДанные действительно возвращает строку, остальные четыре операции изменяют объект.

  3. Только в собственной учебной копии замените комментарий текстом или меняйте контроль: ожидается остановка, а не работа методов по объекту другого класса.

  4. Не проверяйте результат визуализацией внешнего сайта: комментарий — данные собственного дерева. Код не открывает браузер, не сохраняет HTML и не меняет бизнес-объекты.

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

При полном успешном контроле: фактическая пометка B-02 проверено, фактический размер 14 и неизменный видимый контроль заказа.

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

  1. Модель создаётся только из собственной фиксированной строки. Нельзя подставлять внешний документ, объект пользователя, файл, URL или рабочие данные и считать этот пример проверкой их безопасности.

  2. Установленная 8.5.1.1343 объявляет СоздатьКомментарий → КомментарийDOM и СоздатьТекстовыйУзел → ТекстDOM. Они не служат доказательством специальных HTML-получателей. Здесь реальные специальные узлы происходят из собственного HTMLReader/DOMBuilder и проверяются.

  3. Общий возвращаемый HTML-тип не обещает конкретный класс в любой среде. Несовпадение фактического типа/формы означает остановку и неподтверждённый опыт, не успешный обход ошибки.

  4. Не переносите правила имён, соседей и пространств имён из W3C по памяти. Сохраняются точные объявленные локальные контракты и реальные наблюдения; данные узлов не приводятся к другому классу.

  5. Чтение закрывается на нормальном пути и в обработчике ошибки; исключение повторно вызывается. Ошибка самого закрытия тоже останавливает опыт: успешная очистка при любом отказе не обещается.

  6. Нативные тексты справки и существующие конфигурационные образцы не исправлялись. Компилятор и 1С во время подготовки не запускались; статические проверки не являются выполнением примера.

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

Прочитать свойства HTML-документа и состав его коллекций

Паспорт собственного документа в памяти не является информацией о текущей вкладке браузера. Считаем картинки, ссылки, формы и аплеты.

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

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

Подготовка

  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-документ";
КонецЕсли;
Сообщить("URI: " + Документ.URIДокумента);
Сообщить("Базовый URL: " + Документ.URL);
Сообщить("Домен: " + Документ.Домен);
Сообщить("Отношение: " + Документ.Отношение);
Сообщить("Кодировка источника: " + Документ.КодировкаИсточника);
Сообщить(Документ.Картинки.Количество() = 1);
Сообщить(Документ.Ссылки.Количество() = 1);
Сообщить(Документ.Формы.Количество() = 1);
Сообщить(Документ.Аплеты.Количество() = 0);
Сообщить(Документ.ЭлементДокумента <> Неопределено);
Сообщить(Документ.ДокументВладелец = Неопределено);
Сообщить(Документ.РодительскийУзел = Неопределено);
Сообщить(Документ.ПредыдущийСоседний = Неопределено);
Сообщить(Документ.СледующийСоседний = Неопределено);
Сообщить(Документ.ПервыйДочерний <> Неопределено);
Сообщить(Документ.ПоследнийДочерний <> Неопределено);
Сообщить(Документ.ЕстьДочерниеУзлы());
Сообщить("Узел: " + Документ.ИмяУзла);
Сообщить("Тип узла: " + Строка(Документ.ТипУзла));
Сообщить("Локальное имя: " + Строка(Документ.ЛокальноеИмя));
Сообщить("Префикс: " + Строка(Документ.Префикс));
Сообщить("Значение: " + Строка(Документ.ЗначениеУзла));
Сообщить("Текст: " + Строка(Документ.ТекстовоеСодержимое));
Сообщить("Атрибуты документа: " + Строка(Документ.Атрибуты));
Сообщить("Есть атрибуты: " + Строка(Документ.ЕстьАтрибуты()));
Для Индекс = 0 По Документ.ДочерниеУзлы.Количество() - 1 Цикл
    Ребёнок = Документ.ДочерниеУзлы.Элемент(Индекс);
    Сообщить(Ребёнок.РодительскийУзел = Документ);
КонецЦикла;

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

  1. Источник задан строкой, поэтому не обещаем реальный домен, URL или кодировку сетевого ответа.

  2. Документ не имеет документа-владельца или родителя, но имеет корневой элемент и детей.

  3. Узел документа не равен элементу: Атрибуты и ЗначениеУзла изучаем как фактические значения, не пытаемся обращаться к ним как к тексту input.

  4. Перебираем детей только по допустимым индексам, проверяя обратную ссылку на документ.

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

  1. Для собственного заказа: одна картинка, одна ссылка, одна форма и ноль аплетов; все четыре сравнения Истина.

  2. Проверки границ документа Истина; у каждого полученного ребёнка родитель — данный документ.

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

Прочитан паспорт собственного дерева, не браузера или веб-сервера.

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

  1. Строковый URL не является результатом выполненного HTTP-запроса.

  2. Картинки.Количество() считает img, а не успешно загруженные изображения.

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

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

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

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

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