<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документ (DOM) on JSFlow</title><link>https://jsflow.ru/docs/dom/</link><description>Recent content in Документ (DOM) on JSFlow</description><generator>Hugo</generator><language>ru</language><atom:link href="https://jsflow.ru/docs/dom/index.xml" rel="self" type="application/rss+xml"/><item><title>Браузерное окружение</title><link>https://jsflow.ru/docs/dom/environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/environment/</guid><description>&lt;h1 id="браузерное-окружение"&gt;
 Браузерное окружение
 &lt;a class="anchor" href="#%d0%b1%d1%80%d0%b0%d1%83%d0%b7%d0%b5%d1%80%d0%bd%d0%be%d0%b5-%d0%be%d0%ba%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Браузерное окружение&lt;/strong&gt; — это набор объектов, которые JavaScript получает при выполнении на странице. Глобальный объект &lt;code&gt;window&lt;/code&gt; представляет вкладку; &lt;code&gt;document&lt;/code&gt; — загруженный HTML-документ. Вместе они образуют точку входа для любого UI-кода в JSFlow: от виджета «Активные сессии» до плеера плейлиста.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="window--глобальная-область-вкладки"&gt;
 window — глобальная область вкладки
 &lt;a class="anchor" href="#window--%d0%b3%d0%bb%d0%be%d0%b1%d0%b0%d0%bb%d1%8c%d0%bd%d0%b0%d1%8f-%d0%be%d0%b1%d0%bb%d0%b0%d1%81%d1%82%d1%8c-%d0%b2%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;В браузере глобальные переменные и функции становятся свойствами &lt;code&gt;window&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;window.&lt;span style="color:#a6e22e"&gt;JSFlow&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; { &lt;span style="color:#a6e22e"&gt;version&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;1.0&amp;#39;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;pingDashboard&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;dashboard alive&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;window.&lt;span style="color:#a6e22e"&gt;pingDashboard&lt;/span&gt; &lt;span style="color:#f92672"&gt;===&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;pingDashboard&lt;/span&gt; &lt;span style="color:#75715e"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;window&lt;/code&gt; также даёт доступ к размерам области просмотра и прокрутке:&lt;/p&gt;</description></item><item><title>DOM-дерево и навигация</title><link>https://jsflow.ru/docs/dom/tree/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/tree/</guid><description>&lt;h1 id="dom-дерево-и-навигация"&gt;
 DOM-дерево и навигация
 &lt;a class="anchor" href="#dom-%d0%b4%d0%b5%d1%80%d0%b5%d0%b2%d0%be-%d0%b8-%d0%bd%d0%b0%d0%b2%d0%b8%d0%b3%d0%b0%d1%86%d0%b8%d1%8f"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;DOM-дерево&lt;/strong&gt; — иерархическое представление HTML-документа, где каждый тег, текст и комментарий становится &lt;strong&gt;узлом&lt;/strong&gt; (node). JavaScript может перемещаться по связям «родитель — потомок — сосед» и так находить нужные части интерфейса без повторного поиска по всей странице.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="типы-узлов"&gt;
 Типы узлов
 &lt;a class="anchor" href="#%d1%82%d0%b8%d0%bf%d1%8b-%d1%83%d0%b7%d0%bb%d0%be%d0%b2"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Основные типы, с которыми работает UI-код:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Тип&lt;/th&gt;
					&lt;th&gt;Константа&lt;/th&gt;
					&lt;th&gt;Пример&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Элемент&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Node.ELEMENT_NODE&lt;/code&gt; (1)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;section class=&amp;quot;widget&amp;quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Текст&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Node.TEXT_NODE&lt;/code&gt; (3)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;3 трека в очереди&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Комментарий&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Node.COMMENT_NODE&lt;/code&gt; (8)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;!-- skeleton --&amp;gt;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Документ&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Node.DOCUMENT_NODE&lt;/code&gt; (9)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;#document&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;trackTitle&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;querySelector&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;.track-title&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;trackTitle&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;nodeType&lt;/span&gt; &lt;span style="color:#75715e"&gt;// 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;trackTitle&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;nodeName&lt;/span&gt; &lt;span style="color:#75715e"&gt;// &amp;#34;H3&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;trackTitle&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;textContent&lt;/span&gt; &lt;span style="color:#75715e"&gt;// текст внутри, включая вложенные элементы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="родители-и-предки"&gt;
 Родители и предки
 &lt;a class="anchor" href="#%d1%80%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d0%b8-%d0%b8-%d0%bf%d1%80%d0%b5%d0%b4%d0%ba%d0%b8"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Подняться от элемента к контейнеру:&lt;/p&gt;</description></item><item><title>Поиск элементов</title><link>https://jsflow.ru/docs/dom/query/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/query/</guid><description>&lt;h1 id="поиск-элементов"&gt;
 Поиск элементов
 &lt;a class="anchor" href="#%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d1%8d%d0%bb%d0%b5%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Поиск в DOM&lt;/strong&gt; — первый шаг почти любого браузерного модуля: скрипт получает ссылку на узел и дальше читает данные или вешает обработчики. Современный код опирается на CSS-селекторы через &lt;code&gt;querySelector&lt;/code&gt; и &lt;code&gt;querySelectorAll&lt;/code&gt;; &lt;code&gt;getElementById&lt;/code&gt; остаётся самым быстрым способом для уникальных якорей.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="getelementbyid"&gt;
 getElementById
 &lt;a class="anchor" href="#getelementbyid"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Ищет элемент по значению атрибута &lt;code&gt;id&lt;/code&gt;. ID должен быть уникален в документе:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;checkoutForm&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;getElementById&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;checkout-form&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;playlistRoot&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;getElementById&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;playlist-root&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Эквивалент через селектор (кавычки в ID экранируйте при необходимости):&lt;/p&gt;</description></item><item><title>Свойства и атрибуты</title><link>https://jsflow.ru/docs/dom/attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/attributes/</guid><description>&lt;h1 id="свойства-и-атрибуты"&gt;
 Свойства и атрибуты
 &lt;a class="anchor" href="#%d1%81%d0%b2%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0-%d0%b8-%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Атрибуты&lt;/strong&gt; — то, что записано в HTML (&lt;code&gt;disabled&lt;/code&gt;, &lt;code&gt;data-track-id&lt;/code&gt;). &lt;strong&gt;Свойства&lt;/strong&gt; — поля JavaScript-объекта элемента; они могут расходиться с разметкой (например, &lt;code&gt;value&lt;/code&gt; у &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;). Для UI JSFlow атрибуты &lt;code&gt;data-*&lt;/code&gt; и классы часто хранят состояние, а свойства — отражают интерактивность формы.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="чтение-и-запись-атрибутов"&gt;
 Чтение и запись атрибутов
 &lt;a class="anchor" href="#%d1%87%d1%82%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d1%8c-%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%be%d0%b2"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;emailInput&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;querySelector&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;#checkout-email&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;emailInput&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;getAttribute&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// &amp;#34;email&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;emailInput&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;setAttribute&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;aria-invalid&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;emailInput&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;removeAttribute&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;readonly&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;emailInput&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;hasAttribute&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;required&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;getAttribute&lt;/code&gt; всегда возвращает строку или &lt;code&gt;null&lt;/code&gt;. Булевы атрибуты в HTML (&lt;code&gt;disabled&lt;/code&gt;, &lt;code&gt;checked&lt;/code&gt;) присутствуют как пустая строка или имя атрибута:&lt;/p&gt;</description></item><item><title>Изменение документа</title><link>https://jsflow.ru/docs/dom/mutate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/mutate/</guid><description>&lt;h1 id="изменение-документа"&gt;
 Изменение документа
 &lt;a class="anchor" href="#%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b4%d0%be%d0%ba%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b0"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Мутации DOM&lt;/strong&gt; — создание, вставка, замена и удаление узлов. JavaScript может собирать интерфейс после загрузки данных: строки плейлиста, карточки метрик, шаги оформления заказа. Современные методы &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;prepend&lt;/code&gt;, &lt;code&gt;remove&lt;/code&gt; и &lt;code&gt;replaceWith&lt;/code&gt; короче, чем связка &lt;code&gt;appendChild&lt;/code&gt; / &lt;code&gt;removeChild&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="createelement-и-текст"&gt;
 createElement и текст
 &lt;a class="anchor" href="#createelement-%d0%b8-%d1%82%d0%b5%d0%ba%d1%81%d1%82"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;li&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;createElement&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;li&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;li&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;className&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;track-row&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;li&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;dataset&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;trackId&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;tr-901&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;title&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;createElement&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;span&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;className&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;track-row__title&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;textContent&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Midnight Loop&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;li&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;append&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;textContent&lt;/code&gt; безопаснее &lt;code&gt;innerHTML&lt;/code&gt;, если строка приходит из API и может содержать символы &lt;code&gt;&amp;lt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Стили, размеры, координаты</title><link>https://jsflow.ru/docs/dom/layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/dom/layout/</guid><description>&lt;h1 id="стили-размеры-координаты"&gt;
 Стили, размеры, координаты
 &lt;a class="anchor" href="#%d1%81%d1%82%d0%b8%d0%bb%d0%b8-%d1%80%d0%b0%d0%b7%d0%bc%d0%b5%d1%80%d1%8b-%d0%ba%d0%be%d0%be%d1%80%d0%b4%d0%b8%d0%bd%d0%b0%d1%82%d1%8b"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Геометрия и стили элемента&lt;/strong&gt; нужны, когда UI реагирует на размер окна, рисует оверлеи или фиксирует панель checkout. JavaScript читает вычисленные размеры через &lt;code&gt;getBoundingClientRect&lt;/code&gt;, меняет оформление через &lt;code&gt;classList&lt;/code&gt; и inline-стили &lt;code&gt;element.style&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="classlist"&gt;
 classList
 &lt;a class="anchor" href="#classlist"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Классы — основной способ переключать состояние без inline-CSS:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;bar&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;querySelector&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;.checkout-bar&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;bar&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;is-visible&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;bar&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;remove&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;is-hidden&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;bar&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;toggle&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;is-compact&amp;#39;&lt;/span&gt;, window.&lt;span style="color:#a6e22e"&gt;innerWidth&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;768&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;bar&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;replace&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;theme-light&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;theme-dark&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Несколько классов за раз:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;document.&lt;span style="color:#a6e22e"&gt;querySelector&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;.playlist-panel&amp;#39;&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;is-open&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;has-focus&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Состояние виджета «свернут»:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setWidgetCollapsed&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;widgetEl&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;collapsed&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;widgetEl&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;classList&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;toggle&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;widget--collapsed&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;collapsed&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;widgetEl&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;setAttribute&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;aria-expanded&amp;#39;&lt;/span&gt;, String(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;collapsed&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="inline-стили-elementstyle"&gt;
 Inline-стили: element.style
 &lt;a class="anchor" href="#inline-%d1%81%d1%82%d0%b8%d0%bb%d0%b8-elementstyle"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Inline-стили задают конкретные CSS-свойства в camelCase:&lt;/p&gt;</description></item></channel></rss>