ЭлементФорматированногоТекстаHTML.ДобавитьДочерний

Методы · AppendChild

Добавляет узел в список дочерних. Если узел уже присутствует в дереве документа, то он сначала удаляется из прежнего места. Если узлом является ФрагментДокумента, то все содержимое фрагмента будет добавлено в список дочерних.

Синтаксис

ДобавитьДочерний(<НовыйУзел>)
Полное описание, параметры и ограничения

ЭлементФорматированногоТекстаHTML.ДобавитьДочерний (HTMLPreElement.AppendChild)

ЭлементФорматированногоТекстаHTML (HTMLPreElement)

ДобавитьДочерний (AppendChild)

Доступен, начиная с версии 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.
Новый дочерний узел HTMLDOM.
Возвращаемое значение:
Тип: Атрибут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-комментариями. Не добавляем детей в пустые теги input, img, col, meta, link, hr, frame и embed.

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

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

Подготовка

  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-документ";
КонецЕсли;
Ожидаемые = Новый Соответствие;
Ожидаемые.Вставить("guide-section", "ЭлементHTML");
Ожидаемые.Вставить("div", "ЭлементБлокHTML");
Ожидаемые.Вставить("pre", "ЭлементФорматированногоТекстаHTML");
Ожидаемые.Вставить("form", "ЭлементФормаHTML");
Ожидаемые.Вставить("button", "ЭлементКнопкаHTML");
Ожидаемые.Вставить("table", "ЭлементТаблицаHTML");
Ожидаемые.Вставить("tr", "ЭлементСтрокаТаблицыHTML");
Ожидаемые.Вставить("td", "ЭлементЯчейкаТаблицыHTML");
Ожидаемые.Вставить("caption", "ЭлементЗаголовокТаблицыHTML");
Ожидаемые.Вставить("a", "ЭлементЯкорьHTML");
Ожидаемые.Вставить("head", "ЭлементЗаголовокHTML");
Ожидаемые.Вставить("html", "ЭлементРазметкаHTML");
Ожидаемые.Вставить("script", "ЭлементСкриптHTML");
Ожидаемые.Вставить("iframe", "ЭлементПлавающийФреймHTML");
Ожидаемые.Вставить("frameset", "ЭлементНаборФреймовHTML");
Ожидаемые.Вставить("object", "ЭлементОбъектHTML");
Ожидаемые.Вставить("applet", "ЭлементАплетHTML");
Для Каждого Пара Из Ожидаемые Цикл
    Узел = Документ.СоздатьЭлемент(Пара.Ключ);
    Если ТипЗнч(Узел) <> Тип(Пара.Значение) Тогда
        ВызватьИсключение "Фактический тип фабрики отличается для " + Пара.Ключ;
    КонецЕсли;
    Первый = Документ.СоздатьКомментарий("Урок A-01");
    Второй = Документ.СоздатьКомментарий("Проверка 3");
    НовыйУзел = Документ.СоздатьКомментарий("Проверка завершена");
    Узел.ДобавитьДочерний(Первый);
    Узел.ВставитьПеред(Второй, Первый);
    Сообщить(Узел.ПервыйДочерний = Второй);
    Узел.ЗаменитьДочерний(НовыйУзел, Первый);
    Сообщить(Узел.ПоследнийДочерний = НовыйУзел);
    Сообщить(Первый.РодительскийУзел = Неопределено);
    Узел.Нормализовать();
    Сообщить(Узел.ДочерниеУзлы.Количество() = 2);
    Удалённый = Узел.УдалитьДочерний(Второй);
    Сообщить(Удалённый = Второй);
    Узел.УдалитьДочерний(НовыйУзел);
    Сообщить(Не Узел.ЕстьДочерниеУзлы());
КонецЦикла;

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

  1. Обрабатываем только 17 непустых по модели HTML тегов; элементы остаются вне документа заказа.

  2. ДобавитьДочерний вставляет первый служебный узел, ВставитьПеред добавляет второй перед ним.

  3. ЗаменитьДочерний вызывается без присваивания результата; прежний узел становится отсоединённым.

  4. Нормализовать не объединяет HTML-комментарии, затем удаляем два оставшихся узла.

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

  1. Шесть сравнений для каждого контейнера Истина; в конце у него снова нет детей.

  2. Комментарии не отображаются как текст заказа и не содержат исполняемого кода.

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

Показаны основные операции изменения дочернего дерева на конкретных контейнерных типах.

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

  1. Не используйте текст комментария как скрытое хранилище секретов.

  2. Служебные комментарии не равны тегам товаров или новым строкам таблицы.

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

Подготовить блок, форматированный текст и разделительную линию

Показываем собственные данные A-01: 3 и B-02: 1 без исполнения разметки. HTML-блок не становится группой формы 1С.

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

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

Подготовка

  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-документ";
КонецЕсли;
Блок = Документ.СоздатьЭлемент("div");
Если ТипЗнч(Блок) <> Тип("ЭлементБлокHTML") Тогда
    ВызватьИсключение "Проверьте специальный тип собственного div";
КонецЕсли;
Код = Документ.СоздатьЭлемент("pre");
Если ТипЗнч(Код) <> Тип("ЭлементФорматированногоТекстаHTML") Тогда
    ВызватьИсключение "Проверьте специальный тип собственного pre";
КонецЕсли;
Линия = Документ.СоздатьЭлемент("hr");
Если ТипЗнч(Линия) <> Тип("ЭлементЛинияHTML") Тогда
    ВызватьИсключение "Проверьте специальный тип собственного hr";
КонецЕсли;
Блок.Выравнивание = "left";
Код.Ширина = "40";
Линия.Цвет = "#cbd5e1";
Текст = Документ.СоздатьТекстовыйУзел("A-01: 3" + Символы.ПС + "B-02: 1");
Код.ДобавитьДочерний(Текст);
Блок.ДобавитьДочерний(Код);
Блок.ДобавитьДочерний(Линия);
Сообщить(Блок.ДочерниеУзлы.Количество() = 2);
Сообщить(Код.ТекстовоеСодержимое = "A-01: 3" + Символы.ПС + "B-02: 1");
Сообщить(Код.Ширина = "40");
Сообщить(Линия.Цвет = "#cbd5e1");
Сообщить(Блок.РодительскийУзел = Неопределено);

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

  1. Фабрика создаёт div, pre и hr, для каждого проверяем фактический специальный тип.

  2. В pre добавляем один буквальный текстовый узел с переводом строки, не исполняемый код.

  3. В div добавляем два элемента; сам блок пока остаётся вне дерева заказа.

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

  1. Пять сравнений Истина: два дочерних элемента, правильный текст, ширина, цвет и отсутствие родителя блока.

  2. В рабочей форме 1С не появляется новая группа или линия.

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

Собран отдельный учебный фрагмент HTML в памяти.

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

  1. Старое свойство Ширина pre не является шириной редактора BSL.

  2. Текст с переносом сохраняется в DOM; визуальное отображение нужно проверять отдельно.

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

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

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

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

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