Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Работа с ДОМ

Парсинг, навигация и модификация HTML DOM в WDSP

 Парсинг HTML

дом.парсить(htmlСтрока)

Преобразует строку с HTML-кодом в объект документа, с которым можно работать.

ПараметрТипОписание
htmlСтрокастрокаHTML-код для разбора
Возвращает: объект документа (корневой элемент)
Пример:
₽док = дом.парсить("<div id='main'>...</div>");

дом.парситьФайл(путь)

Загружает HTML-файл с диска и возвращает его DOM-представление.

ПараметрТипОписание
путьстрокаПуть к файлу
Возвращает: объект документа
При ошибке открытия файла выбрасывает исключение.
Пример:
₽док = дом.парситьФайл("index.html");

дом.создатьЭлемент(имяТега)

Создаёт новый HTML-элемент с указанным тегом (например, "div", "p", "span").

ПараметрТипОписание
имяТегастрокаИмя тега (строчными буквами)
Возвращает: новый объект-элемент
Пример:
₽новыйДив = дом.создатьЭлемент("div");

Все методы поиска доступны как у объекта документа, так и у любого элемента-контейнера.

элемент.найтиПоТегу(тег)

Возвращает первого потомка (включая текущий) с указанным тегом.

ПараметрТипОписание
тегстрокаИмя тега (например, "p", "h1")
Возвращает: объект-элемент или ничто

элемент.найтиПоИд(ид)

Возвращает элемент с указанным идентификатором id.

Возвращает: объект-элемент или ничто

элемент.найтиПоКлассу(класс)

Возвращает первый элемент с указанным CSS-классом.

Возвращает: объект-элемент или ничто

элемент.найтиВсеПоТегу(тег)

Возвращает массив всех элементов с указанным тегом внутри текущего.

Возвращает: массив элементов
Примеры из теста:
₽заголовок = ₽док.найтиПоТегу("h1");
₽главный = ₽док.найтиПоИд("main");
₽текст = ₽док.найтиПоКлассу("text");
₽всеПараграфы = ₽док.найтиВсеПоТегу("p");

элемент.родитель()

Возвращает родительский элемент.

Возвращает: объект-элемент или ничто для корня

элемент.дети()

Возвращает массив дочерних элементов-узлов (только элементы, не текстовые узлы).

Возвращает: массив элементов

элемент.первыйРебёнок()

Возвращает первого дочернего элемента.

Возвращает: объект-элемент или ничто

элемент.последнийРебёнок()

Возвращает последнего дочернего элемента.

Возвращает: объект-элемент или ничто

элемент.следующий()

Возвращает следующий смежный элемент (братский узел).

Возвращает: объект-элемент или ничто

элемент.предыдущий()

Возвращает предыдущий смежный элемент.

Возвращает: объект-элемент или ничто
Пример:
₽корень = ₽главный.родитель();
₽дети = ₽главный.дети();
₽первый = ₽главный.первыйРебёнок();

 Работа с атрибутами

элемент.атрибут(имя)

Возвращает значение атрибута. Если атрибут отсутствует — возвращает пустую строку.

ПараметрТипОписание
имястрокаИмя атрибута
Возвращает: строка

элемент.установитьАтрибут(имя, значение)

Устанавливает значение атрибута. Если атрибут существовал — перезаписывает.

ПараметрТипОписание
имястрокаИмя атрибута
значениестрокаНовое значение
Возвращает: ничего

элемент.удалитьАтрибут(имя)

Удаляет атрибут.

Возвращает: ничего

элемент.имеетАтрибут(имя)

Проверяет наличие атрибута.

Возвращает: логическое значение
Пример:
₽ид = ₽главный.атрибут("id");  // "main"
₽главный.установитьАтрибут("data-role", "wrapper");
если (₽главный.имеетАтрибут("data-role")) { ... }

 Работа с классами

элемент.имеетКласс(класс)

Проверяет, есть ли у элемента указанный класс.

Возвращает: логическое значение

элемент.добавитьКласс(класс)

Добавляет класс (если его ещё нет).

Возвращает: ничего

элемент.удалитьКласс(класс)

Удаляет класс.

Возвращает: ничего

элемент.переключитьКласс(класс)

Если класс присутствует — удаляет, иначе — добавляет.

Возвращает: ничего
Пример:
₽параграф.добавитьКласс("active");
если (₽параграф.имеетКласс("active")) { ... }
₽параграф.переключитьКласс("active");

 Содержимое элементов

элемент.текст()

Возвращает текстовое содержимое элемента (без HTML-разметки).

Возвращает: строка

элемент.установитьТекст(текст)

Заменяет всё содержимое элемента на указанный текст (HTML-код экранируется).

Возвращает: ничего

элемент.html()

Возвращает внутренний HTML-код элемента.

Возвращает: строка

элемент.установитьHTML(html)

Полностью заменяет внутреннее содержимое элемента на переданный HTML-код.

Возвращает: ничего

элемент.добавитьHTML(html)

Вставляет HTML-код в конец содержимого элемента (как последние дочерние узлы).

Возвращает: ничего

элемент.вставитьВНачалоHTML(html)

Вставляет HTML-код в начало содержимого (как первые дочерние узлы).

Возвращает: ничего
Примеры:
₽заголовок.установитьТекст("Новый заголовок");
₽главный.добавитьHTML("<span>Вставка</span>");
₽главный.вставитьВНачалоHTML("<em>В начале</em>");
₽главный.установитьHTML("<p>Только этот текст</p>");

 Создание и вставка элементов

элемент.добавить(новыйЭлемент)

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

Возвращает: ничего

элемент.вставитьВНачало(новыйЭлемент)

Добавляет элемент как первый дочерний.

Возвращает: ничего

элемент.после(новыйЭлемент)

Вставляет элемент непосредственно после текущего (как следующего брата).

Возвращает: ничего

элемент.заменитьНа(новыйЭлемент)

Заменяет текущий элемент на новый.

Возвращает: ничего

элемент.удалить()

Удаляет элемент из дерева.

Возвращает: ничего

элемент.клонировать(глубоко)

Создаёт копию элемента. Если глубоко = истина, копируются все потомки, иначе только сам элемент.

ПараметрТипОписание
глубокологическийКопировать ли потомков
Возвращает: новый объект-элемент (копия)
Примеры из теста:
₽главный.добавить(₽новыйДив);
₽копия = ₽элемент.клонировать(истина);
₽элемент.заменитьНа(₽новый);
₽элемент.удалить();

 Сериализация

документ.сериализовать()

Преобразует всё дерево документа обратно в строку HTML.

Возвращает: строка (HTML-код)

элемент.внешнийHTML()

Возвращает HTML-код элемента вместе с открывающим и закрывающим тегами (включая сам элемент).

Возвращает: строка
Пример:
₽сериализовано = ₽док.сериализовать();
₽внешний = ₽главный.внешнийHTML();

 Проверка типа

элемент.этоЭлемент()

Возвращает истина, если узел является элементом (тегом), иначе ложь.

Возвращает: логическое значение

элемент.этоТекст()

Возвращает истина, если узел является текстовым узлом.

Возвращает: логическое значение
Пример:
если (₽элемент.этоЭлемент()) {
    вывести("Это HTML-тег");
}

 Крайние случаи

  • Пустой HTML: дом.парсить("") возвращает документ без дочерних элементов.
  • Несуществующий поиск: методы поиска возвращают ничто вместо ошибки.
  • Чтение отсутствующего атрибута: возвращает пустую строку.
  • Установка пустого HTML: установитьHTML("") очищает содержимое.
  • Нормализация: нормализовать() объединяет соседние текстовые узлы; выполняется без ошибок.

 Полный тестовый скрипт

Ниже приведён полный тест модуля «дом», демонстрирующий все описанные функции.

// ============================================================
// ПОЛНЫЙ ТЕСТ МОДУЛЯ "дом" (работа с HTML DOM)
// ============================================================

функция проверить(₽условие, ₽сообщение) {
    если (!₽условие) {
        вывести("ОШИБКА: " + ₽сообщение);
        бросить ₽сообщение;
    } иначе {
        вывести("OK: " + ₽сообщение);
    }
}

функция содержит(₽строка, ₽подстрока) {
    возврат позиция(₽строка, ₽подстрока) >= 0;
}

// ==================== 1. Парсинг HTML ====================
вывести("\n=== 1. Парсинг HTML ===");

₽html = '
<div id="main" class="container">
    <h1>Заголовок</h1>
    <p class="text">Первый параграф</p>
    <p class="text highlight">Второй параграф с классом highlight</p>
    <ul>
        <li>Элемент 1</li>
        <li>Элемент 2</li>
        <li>Элемент 3</li>
    </ul>
    <div data-role="test">Вложенный div</div>
</div>
';

₽док = дом.парсить(₽html);
проверить(тип(₽док) == "объект", "парсить вернул объект");

// ... (остальные тесты см. в полной версии выше) ...

вывести("\nВСЕ ТЕСТЫ МОДУЛЯ DOM УСПЕШНО ПРОЙДЕНЫ");