Link Search Menu Expand Document

УзелHtml

Доступность: Сервер

Иерархия типа

graph TD;
УзелHtml["УзелHtml"]-->Объект["Объект"];

Базовый объект для работы с узлами в html.

Ссылочное


Свойства

ДиапазонВКоде

ТолькоЧтение ДиапазонВКоде: ДиапазонВТексте?
Доступность: Сервер

Возвращает диапазон начала блока или Неопределено - узел еще не размещен в дереве на момент разбора.

Примеры

/*
Для кода:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
<head>
</head>
<body onload="test()">
  <svg version="1.1"
    width="100px" height="100px"
    viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="30" style="fill:#aaa" id="circle"/>
  </svg>
  <textarea id="text" rows="4" cols="55"/>
</body>
</html>
*/

Документ.Тело.ДиапазонВКоде.ВСтроку() - 4:1 - 11:8:(98-328)

ДокументВладелец

ТолькоЧтение ДокументВладелец: ДокументHtml?
Доступность: Сервер

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

Примеры

/*
Для кода:
<html>
    <div id="first">
        <div id="second">
            <p>Some text</p>
        </div>
    </div>
</html>
*/
пер ВложенныйDiv = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("div", "id", "second")[0]
ВложенныйDiv.ДокументВладелец == Документ // Истина
ВложенныйDiv.Родитель.Ид // Будет равен "first"

ВложенныйDiv.Удалить()
ВложенныйDiv.ДокументВладелец == Неопределено // Истина
ВложенныйDiv.Родитель == Неопределено // Истина

ДочерниеУзлы

ТолькоЧтение ДочерниеУзлы: ЧитаемыйМассив<УзелHtml>
Доступность: Сервер

Дочерние узлы, пустой массив, если нет дочерних узлов


ПредыдущийСосед

ТолькоЧтение ПредыдущийСосед: УзелHtml?
Доступность: Сервер

Непосредственно предыдущий узел (узел который лежит на том же уровне до текущего). Неопределено, если у узла нет соседа или узел не размещен в дереве/удален

Примеры

/* Пример части кода:
<label for="1">Russian</label>
<input type="radio" id="1" name="fav_language" value="Russian">
*/
// Для пользовательского ввода данных радио кнопок задать class = Radio, а их лейблам class = Label

пер РадиоКнопки = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("input", "type", "radio")
РадиоКнопки.ДобавитьКласс("Radio")

для Кнопка из РадиоКнопки
    пер УзелЛейбл = РадиоКнопки.ПредыдущийСосед
    если УзелЛейбл != Неопределено и УзелЛейбл это ЭлементHtml
        пер Лейбл = УзелЛейбл как ЭлементHtml
        Лейбл.Атрибуты.Вставить("class", "Label")
    ;
;

/* Пример части результата:
<label for="1" class="Label">Russian</label>
<input type="radio" id="1" name="fav_language" value="Russian" class="Radio">
*/

Родитель

ТолькоЧтение Родитель: УзелHtml?
Доступность: Сервер

Родительский узел. Если узел удален или не был добавлен в дерево, то значение Неопределено

Примеры

/*
Для кода:
<html>
    <div id="first">
        <div id="second">
            <p>Some text</p>
        </div>
    </div>
</html>
*/
пер ВложенныйDiv = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("div", "id", "second")[0]
ВложенныйDiv.ДокументВладелец == Документ // Истина
(ВложенныйDiv.Родитель как ЭлементHtml).Ид // Будет равен "first"

ВложенныйDiv.Удалить()
ВложенныйDiv.ДокументВладелец == Неопределено // Истина
ВложенныйDiv.Родитель == Неопределено // Истина

СледующийСосед

ТолькоЧтение СледующийСосед: УзелHtml?
Доступность: Сервер

Непосредственно следующий узел (узел который лежит на том же уровне после текущего). Неопределено, если у узла нет соседа или узел не размещен в дереве/удален

Примеры

/* Пример части кода:
<label for="1">Russian</label>
<input type="radio" id="1" name="fav_language" value="Russian">
*/
// Для пользовательского ввода данных радио кнопок задать class = Radio, а их лейблам class = Label

пер Лейблы = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("label", "for", "")
Лейблы.УстановитьАтрибут("class", "Label")

для Кнопка из Лейблы
    пер УзелРадиоКнопка = Лейблы.СледующийСосед
    если УзелРадиоКнопка != Неопределено и УзелРадиоКнопка это ЭлементHtml
        пер РадиоКнопка = УзелРадиоКнопка как ЭлементHtml
        РадиоКнопка.ДобавитьКласс("Radio")
    ;
;

/* Пример части результата:
<label for="1" class="Label">Russian</label>
<input type="radio" id="1" name="fav_language" value="Russian" class="Radio">
*/

Методы

ВнешнийКод

ВнешнийКод(НастройкиЗаписи: НастройкиЗаписиHtml? = Неопределено): Строка
Доступность: Сервер

Получить внешний код (Html) для данного узла. Если настройки не указаны, то будут использованы настройки, созданные по умолчанию.

Примеры

/*
Для кода:
<html>
    <div id="first">
        <div id="second">
            <p>Some text</p>
        </div>
    </div>
</html>
*/

пер ВложенныйDiv = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("div", "id", "second")[0]
пер Настройки = новый НастройкиЗаписиHtml()
Настройки.РазмерОтступов = 1
Настройки.УлучшениеВывода = Истина
пер Код = ВложенныйDiv.ВнешнийКод(Настройки)
/*
Код будет равен:
<div id="second">
 <p>Some text</p>
</div>
*/ 

ВставитьКопииУзловДоТекущего

ВставитьКопииУзловДоТекущего(Узлы: УзелHtml|Обходимое<УзелHtml>)
Доступность: Сервер

Клонирует переданные узлы и вставляет перед данным узлом (то есть как предыдущ(его/их) соседа). Если узел является терминальным (например ТекстовыйУзел), то при вызове метода произойдет конкатенация содержимых. Применим, если текущий узел имеет родителя. Например, не применим для ДокументHtml.

Примеры

/*
Для элемента контейнера с кодом: <div data-package="myPackage" data-language="xbsl" class="group">
Нужно добавить комментарий выше с текстом: "Исходный код примера работы"
*/
Контейнер.ВставитьКопииУзловДоТекущего(новый УзелКомментарийHtml("Исходный код примера работы"))
/*
Результат:
<!--Исходный код примера работы-->
<div data-package="myPackage" data-language="xbsl" class="group">
*/

ВставитьКопииУзловПослеТекущего

ВставитьКопииУзловПослеТекущего(Узлы: УзелHtml|Обходимое<УзелHtml>)
Доступность: Сервер

Клонирует переданные узлы и вставляет после данного узла (то есть как следующ(его/их) соседа). Если узел является терминальным (например ТекстовыйУзел), то при вызове метода произойдет конкатенация содержимых. Применим, если текущий узел имеет родителя. Например, не применим для ДокументHtml.

Примеры

если ТУзел.Текст == "Первая часть текста"
    ТУзел.ВставитьКопииУзловПослеТекущего(новый ТекстовыйУзелHtml(", а это вторая часть текста"))
;

// Тогда: ТУзел.Текст - "Первая часть текста, а это вторая часть текста, а это третья часть текста"

ОбойтиВГлубину

ОбойтиВГлубину(
  ПриВходеВУзел: (УзелHtml, Число)->РезультатШагаОбхода,
  ПриВыходеИзУзла: ((УзелHtml, Число)->РезультатШагаОбхода)? = Неопределено)
Доступность: Сервер

Выполняет DFS на узлах на основании фильтров. Аргументы нужны для регулирования направления обхода, при входе в узел во время обхода будет вызван ПриВходеВУзел, при выходе - ПриВыходеИзУзла Число соответствует глубине прохода.

Примеры

// Обойдем все дерево, удалим атрибут "style" у таблиц и установим на строки.
Док.ОбойтиВГлубину(метод(Узел, Глубина)->
    если Узел это ЭлементHtml
        пер Элемент = Узел как ЭлементHtml
        если Элемент.Имя == "table" и Элемент.Атрибуты.ЕстьЗначение("style")
            Элемент.Атрибуты.Удалить("style")
            Элемент
                .ПолучитьДочерниеЭлементы(Ложь, Элемент -> Элемент.Имя == "tr")
                .УстановитьАтрибут("style", "background-color:#00FF00")
        ;
    ;
    возврат РезультатШагаОбхода.ПродолжитьОбход
;)

Удалить

Удалить()
Доступность: Сервер

Удаляет узел. Применим, если текущий узел имеет родителя. Например, не применим для ДокументHtml.

Примеры

/*
Для кода:
<html>
    <div id="first">
        <div id="second">
            <p>Some text</p>
        </div>
    </div>
</html>
*/
пер ВложенныйDiv = Документ.ПолучитьИзПоддереваЭлементыПоАтрибуту("div", "id", "second")[0]
ВложенныйDiv.ДокументВладелец == Документ // Истина
(ВложенныйDiv.Родитель как ЭлементHtml).Ид // Будет равен "first"

ВложенныйDiv.Удалить()
ВложенныйDiv.ДокументВладелец == Неопределено // Истина
ВложенныйDiv.Родитель == Неопределено // Истина

Список унаследованных методов

Объект