ДокументHTML.СоздатьТекстовыйУзел

Методы · CreateTextNode

Создает узел DOM - текст.

Синтаксис

СоздатьТекстовыйУзел(<Текст>)
Полное описание, параметры и ограничения

ДокументHTML.СоздатьТекстовыйУзел (HTMLDocument.CreateTextNode)

ДокументHTML (HTMLDocument)

СоздатьТекстовыйУзел (CreateTextNode)

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

Синтаксис:
СоздатьТекстовыйУзел(<Текст>)
Параметры:

<Текст> (обязательный)
Тип: Строка.
Строка, представляющая собой значение текстового узла.
Возвращаемое значение:
Тип: ТекстDOM.

Описание:

Создает узел DOM - текст.

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

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

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

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

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

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

Нормализовать соседние текстовые узлы собственного HTML-документа

У собственного блока создаём два соседних текста Книга и « и ручка». Нормализовать на уровне документа объединяет их, сохраняя полное текстовое содержимое.

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

Полный серверный общий модуль УчебныйДокументHTML85. Свой HTML создаётся строкой и разбирается в памяти, без браузера и внешних источников.

Подготовка

  1. Используйте отдельную учебную базу 8.5.1.1343. Создайте общий модуль УчебныйДокументHTML85: Сервер — Да, Клиент — Нет, Глобальный — Нет, Вызов сервера — Нет, Привилегированный — Нет.

  2. Вставьте весь приведённый модуль одного урока. В своей управляемой учебной обработке создайте команду и клиентский обработчик, вызывающий свою процедуру с директивой &НаСервереБезКонтекста. В её тело вставьте УчебныйДокументHTML85.ВыполнитьПример();.

  3. Источник HTML полностью записан в коде: свой вымышленный заказ, покупатель, книга, ручка и элементы с явно заданными id. ЧтениеHTML и ПостроительDOM получают строку, а не URL или внешний файл.

  4. Разбор HTML в этом уроке не открывает браузер, не отправляет форму, не загружает картинки и не исполняет JavaScript. Файлы, сеть, печать, рабочие документы и регистры не используются.

  5. Каждый запуск создаёт новый собственный документ в памяти. Поставьте точку останова перед конечными Сообщить и исследуйте Документ, его ЭлементДокумента и указанные переменные урока в серверном отладчике.

  6. ДокументHTML — корневой объект дерева, а его ЭлементДокумента, Тело и отдельный блок — другие узлы. Одинаковые имена методов не означают одинаковые правила допустимых дочерних узлов.

  7. Результаты ниже ожидаемые. В 1С код не запускался; статическая сверка сигнатур и readonly не подтверждает все особенности реализации HTML DOM вашей среды. Выполните проверки только на своём учебном стенде.

Процедура ВыполнитьПример() Экспорт
    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");
    Если Форма = Неопределено Тогда
        ВызватьИсключение "В своём HTML нужна форма order";
    КонецЕсли;
    Если ТипЗнч(Форма) <> Тип("ЭлементФормаHTML") Тогда
        ВызватьИсключение "order должен быть собственной HTML-формой";
    КонецЕсли;
    Блок = Документ.СоздатьЭлемент("div");
    Блок.УстановитьАтрибут("id", "own-work");
    Форма.ДобавитьДочерний(Блок);
    ПервыйТекст = Документ.СоздатьТекстовыйУзел("Книга");
    ВторойТекст = Документ.СоздатьТекстовыйУзел(" и ручка");
    Блок.ДобавитьДочерний(ПервыйТекст);
    Блок.ДобавитьДочерний(ВторойТекст);
    Если Блок.ДочерниеУзлы.Количество() <> 2 Тогда
        ВызватьИсключение "Ожидались два собственных соседних текста";
    КонецЕсли;
    До = Блок.ТекстовоеСодержимое;
    Документ.Нормализовать();
    Сообщить(До = "Книга и ручка");
    Сообщить(Блок.ТекстовоеСодержимое = До);
    Сообщить(Блок.ДочерниеУзлы.Количество() = 1);
    Сообщить(Блок.ПервыйДочерний.ЗначениеУзла = "Книга и ручка");

КонецПроцедуры

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

  1. Разобрать свою строку заказа и проверить реальный ТипЗнч ДокументHTML. Чтение закрывается как после успеха, так и при исключении построителя.

  2. Найти и проверить собственную форму order, создать блок div в том же документе и добавить его в эту форму. Это правка своего дерева в памяти, не страницы открытого браузера.

  3. Создать два текстовых узла через фабрику документа. Их строки задаются явно, поэтому исходное полное содержимое известно: Книга и ручка.

  4. Добавить оба текста в один блок и проверить число детей 2. Они соседние; между ними нет элемента или другого разделяющего узла.

  5. Сохранить полное текстовое содержимое до нормализации. Затем вызвать Нормализовать именно у ДокументHTML, чтобы обработать поддерево на всей глубине.

  6. Проверить число детей 1 и сохранение текста. Нормализация структуры не означает исчезновение второй части надписи.

  7. После нормализации пользоваться актуальными узлами из Блок.ДочерниеУзлы. Старая переменная ВторойТекст не гарантирует, что узел по-прежнему прикреплён к блоку.

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

  1. Четыре конечных сравнения должны дать Истина. Дочерних текстов стало один, надпись остаётся Книга и ручка.

  2. Вставьте между текстами свой элемент span: смежность нарушится. Нормализовать не обязано объединять тексты через этот элемент.

  3. Повторный вызов Нормализовать не должен менять нормализованную надпись. Не проверяйте сохранение идентичности второго исходного узла.

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

Соседние тексты собственного блока объединены на уровне документа с проверкой сохранности содержимого.

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

  1. Нормализация не является очисткой HTML от опасных тегов и не выполняет повторный разбор текстовой строки как разметки.

  2. Readonly ДочерниеУзлы нельзя присваивать заново. Меняем дерево методами, а не подменой коллекции.

  3. Создание текстового узла и создание элемента — разные операции; слово Книга здесь текст, не тег.

  4. Проверки нужно выполнить в своей 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-документ";
КонецЕсли;
Форма = Документ.ПолучитьЭлементПоИдентификатору("order");
Если Форма = Неопределено Тогда
    ВызватьИсключение "Не найден учебный элемент order";
КонецЕсли;
Если ТипЗнч(Форма) <> Тип("ЭлементФормаHTML") Тогда
    ВызватьИсключение "Неожиданный тип учебного элемента order";
КонецЕсли;
Блок = Документ.СоздатьЭлемент("guide-section");
Если ТипЗнч(Блок) <> Тип("ЭлементHTML") Тогда
    ВызватьИсключение "Учебный контейнер должен иметь общий тип ЭлементHTML";
КонецЕсли;
Форма.ДобавитьДочерний(Блок);
Первый = Документ.СоздатьТекстовыйУзел("Книга");
Последний = Документ.СоздатьТекстовыйУзел("3");
Разделитель = Документ.СоздатьТекстовыйУзел(": ");
Блок.ДобавитьДочерний(Первый);
Блок.ДобавитьДочерний(Последний);
Блок.ВставитьПеред(Разделитель, Последний);
Сообщить(Блок.ТекстовоеСодержимое = "Книга: 3");
Сообщить(Блок.ДочерниеУзлы.Количество() = 3);
Сообщить(Разделитель.ПредыдущийСоседний = Первый);
Сообщить(Разделитель.СледующийСоседний = Последний);

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

  1. Готовим три собственных текста одного документа.

  2. Сначала в контейнере находятся Книга и 3.

  3. Передаём существующий Последний как ориентир вставки, не число 1.

  4. Проверяем текст, число узлов и соседство нового разделителя.

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

  1. Четыре сравнения дают Истина: строка Книга: 3, три узла и правильные соседи.

  2. После дополнительного Нормализовать число текстовых узлов может сократиться, но само пояснение останется тем же.

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

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

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

  1. Ориентир должен принадлежать указанному родителю.

  2. Позиция в дереве не равна порядковому номеру заказа в базе.

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

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

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

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

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