ЭлементСтрокаТаблицыHTML.ДобавитьДочерний

Методы · AppendChild

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

Синтаксис

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

ЭлементСтрокаТаблицыHTML.ДобавитьДочерний (HTMLTableRowElement.AppendChild)

ЭлементСтрокаТаблицыHTML (HTMLTableRowElement)

ДобавитьДочерний (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. Служебные комментарии не равны тегам товаров или новым строкам таблицы.

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

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

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

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

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