Node.normalize(): восстановление нормализованной формы текстовых узлов в DOM!
После операций с
const container = document.createElement('div');
const text = document.createTextNode('Hello');
container.append(text);
const tail = text.splitText(2);
console.log([...container.childNodes].map(node => node.data));
// ['He', 'llo']
Для рендеринга это обычно не имеет значения:
console.log(container.textContent);
// Hello
Но для кода, который анализирует структуру дерева через
Метод
container.normalize();
console.log(container.childNodes.length);
// 1
console.log(container.firstChild.data);
// Hello
Нормализация выполняется рекурсивно и гарантирует, что в обработанном поддереве: не останется пустых текстовых узлов; не останется соседних текстовых узлов без разделяющего их элемента, комментария или другого типа узла.
При объединении данные последующих
console.log(tail.parentNode);
// null
Сохранённая ссылка
Важно и другое:
<p>Hello <strong>DOM</strong>!</p>
Здесь текст до и после
Метод особенно полезен после
const paragraph = document.createElement('p');
const text = document.createTextNode('Hello world');
paragraph.replaceChildren(text);
text.splitText(5);
console.log(paragraph.childNodes.length);
// 2
paragraph.normalize();
console.log(paragraph.childNodes.length);
// 1
🔥
📣 Code Ready | #практика
После операций с
Text, Range и точечной модификации DOM содержимое элемента может оказаться фрагментировано на несколько соседних текстовых узлов.const container = document.createElement('div');
const text = document.createTextNode('Hello');
container.append(text);
const tail = text.splitText(2);
console.log([...container.childNodes].map(node => node.data));
// ['He', 'llo']
Для рендеринга это обычно не имеет значения:
console.log(container.textContent);
// Hello
Но для кода, который анализирует структуру дерева через
childNodes, firstChild, nextSibling или хранит ссылки на конкретные Text-узлы, такая фрагментация уже существенна.Метод
Node.normalize() приводит всё поддерево узла к нормализованной форме:container.normalize();
console.log(container.childNodes.length);
// 1
console.log(container.firstChild.data);
// Hello
Нормализация выполняется рекурсивно и гарантирует, что в обработанном поддереве: не останется пустых текстовых узлов; не останется соседних текстовых узлов без разделяющего их элемента, комментария или другого типа узла.
При объединении данные последующих
Text-узлов добавляются к первому узлу группы, а сами последующие узлы удаляются из дерева.console.log(tail.parentNode);
// null
Сохранённая ссылка
tail при этом не становится невалидной: объект продолжает существовать, но больше не является частью DOM-дерева.Важно и другое:
normalize() не объединяет весь текст элемента в один узел, если между текстовыми узлами находятся другие узлы.<p>Hello <strong>DOM</strong>!</p>
Здесь текст до и после
<strong> останется в разных Text-узлах и после нормализации.Метод особенно полезен после
splitText(), операций с Range и редакторских сценариев, где текстовые узлы регулярно разрезаются и склеиваются:const paragraph = document.createElement('p');
const text = document.createTextNode('Hello world');
paragraph.replaceChildren(text);
text.splitText(5);
console.log(paragraph.childNodes.length);
// 2
paragraph.normalize();
console.log(paragraph.childNodes.length);
// 1
🔥
Node.normalize() не меняет текстовое содержимое элемента, но приводит его поддерево к нормализованной форме: без пустых и соседних текстовых узлов. Это полезно перед обходом DOM, сериализацией, сравнением структуры или выполнением алгоритмов, которые рассчитывают на предсказуемую организацию Text-узлов.📣 Code Ready | #практика
Издательский дом «Новые отраслевые медиа» собрал для вас лучшие каналы из сферы искусственного интеллекта и интернет-технологий, которые помогают своим подписчикам быть в курсе всех важных профессиональных новостей.
Здесь - всё про ключевых игроков отрасли, государственное регулирование, инсайды и кейсы от отраслевых лидеров.
✅Серверная - канал об индустрии дата-центров: технологиях, инфраструктуре, облачных решениях, энергоэффективности и применении ЦОД в ключевых отраслях экономики.
✅Робосфера - канал об индустрии робототехники: технологии и тренды. Промышленные и сервисные роботы, коботы, автоматизация, ИИ, машинное зрение, автономные системы.
✅AI для бизнеса - всё об AI-решениях для бизнеса: внедрение, автоматизация, корпоративный ИИ, агенты.
✅ТехноРитейл - канал о производстве и продаже бытовой техники и электроники в России: бренды, e-com, маркетинг, retail tech.
Подписывайтесь, и эти каналы смогут изменить вашу жизнь к лучшему!
Реклама. Харламов А.Е. ИНН 712803816807. erid: 2W5zFJRaaAD
Здесь - всё про ключевых игроков отрасли, государственное регулирование, инсайды и кейсы от отраслевых лидеров.
✅Серверная - канал об индустрии дата-центров: технологиях, инфраструктуре, облачных решениях, энергоэффективности и применении ЦОД в ключевых отраслях экономики.
✅Робосфера - канал об индустрии робототехники: технологии и тренды. Промышленные и сервисные роботы, коботы, автоматизация, ИИ, машинное зрение, автономные системы.
✅AI для бизнеса - всё об AI-решениях для бизнеса: внедрение, автоматизация, корпоративный ИИ, агенты.
✅ТехноРитейл - канал о производстве и продаже бытовой техники и электроники в России: бренды, e-com, маркетинг, retail tech.
Подписывайтесь, и эти каналы смогут изменить вашу жизнь к лучшему!
Реклама. Харламов А.Е. ИНН 712803816807. erid: 2W5zFJRaaAD
🎨 Цветовая палитра макета "Presentation Template 02"
⚠️ Цвет копируется одним кликом!
Сайтодел | #палитра
HEX | RGB #1BA58B | rgb(27, 165, 139)#A61C1C | rgb(166, 28, 28)#333333 | rgb(51, 51, 51)⚠️ Цвет копируется одним кликом!
Сайтодел | #палитра
💾 Hamburgers – набор анимированных иконок для меню. Анимация сделана за счет вращения, а также расширения иконки вниз и вверх.
Сайтодел | #сниппет #css
Сайтодел | #сниппет #css
🖥 School App – дизайн приложения для школьников, который включает сочетания разных геометрических фигур и контрастные цвета.
Сайтодел | #макет #figma
Сайтодел | #макет #figma
👩💻 Блок для видео, аудио и прочего контента!
Блок для вставки на страницу контента в сторонних форматах, которые браузер отображает с помощью плагинов. Чаще всего используется для видео- и аудиоконтента. Отображение вставленного контента будет зависеть от атрибутов тега
Атрибуты:
• src — ссылка на загружаемый контент;
• type — тип загружаемого контента в формате MIME. Тип указывать не обязательно, но желательно. Так браузер будет точно знать, какой плагин использовать для отображения контента;
• width — ширина в пикселях;
• height — высота в пикселях.
📣 Code Ready | #атрибут
Блок для вставки на страницу контента в сторонних форматах, которые браузер отображает с помощью плагинов. Чаще всего используется для видео- и аудиоконтента. Отображение вставленного контента будет зависеть от атрибутов тега
<embed>, типа загружаемого контента и плагинов, установленных в браузере.Атрибуты:
• src — ссылка на загружаемый контент;
• type — тип загружаемого контента в формате MIME. Тип указывать не обязательно, но желательно. Так браузер будет точно знать, какой плагин использовать для отображения контента;
• width — ширина в пикселях;
• height — высота в пикселях.
<embed> не заменяет универсальное решение для всех типов контента. Например, для видео лучше использовать <video>, для аудио — <audio>, а для документов чаще применяют <iframe>.📣 Code Ready | #атрибут
🐙 UI – репозиторий с примерами простых компонентов пользовательского интерфейса. Элементы написаны на React.js и Next.js.
Сайтодел | #репозиторий #github
Сайтодел | #репозиторий #github
💀 Киберпанк. Итоги.
На «Госуслугах» появится сервис поиска... мест на кладбищах.
Это не шутка. В ближайшее время россияне смогут заранее, прямо в приложении подобрать участок на кладбище, посмотреть доступные варианты и оформить всё онлайн. В систему планируют загрузить данные более чем о 14 тысячах кладбищ по всей стране.
Пилотный запуск ожидается уже в этом году в нескольких регионах, а затем сервис постепенно расширят на остальную страну.
Damn... 🌟
На «Госуслугах» появится сервис поиска... мест на кладбищах.
Это не шутка. В ближайшее время россияне смогут заранее, прямо в приложении подобрать участок на кладбище, посмотреть доступные варианты и оформить всё онлайн. В систему планируют загрузить данные более чем о 14 тысячах кладбищ по всей стране.
Пилотный запуск ожидается уже в этом году в нескольких регионах, а затем сервис постепенно расширят на остальную страну.
Damn... 🌟
Проверяй возможности браузера прямо в CSS!
Многие делают такие проверки через JavaScript:
if ("container" in document.documentElement.style) {
// включаем новую логику
}
Но CSS уже давно умеет сам проверять поддержку возможностей.
@supports (display: grid) {
.layout {
display: grid;
}
}
Это особенно полезно при постепенном внедрении новых CSS API.
Например, можно безопасно добавить современные возможности:
@supports (interpolate-size: allow-keywords) {
.accordion {
interpolate-size: allow-keywords;
}
}
Старые браузеры просто проигнорируют этот блок.
Для больших проектов это позволяет мигрировать постепенно.
@supports not (selector(:has(*))) {
/* fallback */
}
🔥
📣 Code Ready | #совет
Многие делают такие проверки через JavaScript:
if ("container" in document.documentElement.style) {
// включаем новую логику
}
Но CSS уже давно умеет сам проверять поддержку возможностей.
@supports (display: grid) {
.layout {
display: grid;
}
}
Это особенно полезно при постепенном внедрении новых CSS API.
Например, можно безопасно добавить современные возможности:
@supports (interpolate-size: allow-keywords) {
.accordion {
interpolate-size: allow-keywords;
}
}
Старые браузеры просто проигнорируют этот блок.
Для больших проектов это позволяет мигрировать постепенно.
@supports not (selector(:has(*))) {
/* fallback */
}
🔥
@supports позволяет внедрять новые CSS-возможности без JS-проверок и не ломать поддержку старых браузеров.📣 Code Ready | #совет
💾 Box Shadow Animation – эффект изменения ширины рамки. Достигается за счет анимации для тени кнопок.
Сайтодел | #сниппет #css
Сайтодел | #сниппет #css
🚀 ScreenCoder — Новый уровень магии для фронтендеров и дизайнеров.
Загружаете скриншот или макет, а нейросеть превращает его в чистый, готовый к продакшену HTML/CSS-код 🤯
Больше не нужно вручную верстать кнопки и блоки — ScreenCoder понимает визуал, сам планирует layout и пишет код, который можно сразу редактировать и использовать.
Что умеет:
🟢Превращает любой дизайн в HTML/CSS;
🟢Генерирует чистую и читаемую верстку;
🟢Позволяет менять стили и структуру под себя;
🟢Подходит и для быстрых прототипов, и для пиксель-перфект интерфейсов.
Просто — загрузил, скопировал, подправил, развернул.
Design → Code за пару секунд.
♎️ GitHub/Инструкция по установке
#python
Загружаете скриншот или макет, а нейросеть превращает его в чистый, готовый к продакшену HTML/CSS-код 🤯
Больше не нужно вручную верстать кнопки и блоки — ScreenCoder понимает визуал, сам планирует layout и пишет код, который можно сразу редактировать и использовать.
Что умеет:
🟢Превращает любой дизайн в HTML/CSS;
🟢Генерирует чистую и читаемую верстку;
🟢Позволяет менять стили и структуру под себя;
🟢Подходит и для быстрых прототипов, и для пиксель-перфект интерфейсов.
Просто — загрузил, скопировал, подправил, развернул.
Design → Code за пару секунд.
♎️ GitHub/Инструкция по установке
#python
This media is not supported in your browser
VIEW IN TELEGRAM
💾 Turnable Cards – трехмерная анимация карточек. При наведении курсора карточка просто двигается, а при нажатии - переворачивается.
Сайтодел | #сниппет #css
Сайтодел | #сниппет #css
👩💻 Стилизуют элементы формы по валидности!
Как они работают:
• :user-valid — пользователь ввёл корректное значение;
• :user-invalid — введённые данные не прошли валидацию.
Главное преимущество — форма не показывает ошибку сразу при загрузке страницы. Это удобно для более аккуратной UX-валидации без JavaScript.
📣 Code Ready | #свойство
:user-valid и :user-invalid — псевдоклассы, которые совпадают с элементами форм по их валидности, но только после того, как пользователь изменил значение поля (элемент стал «грязным»). Это позволяет показывать обратную связь не сразу при загрузке страницы, а лишь после действия пользователя.Как они работают:
• :user-valid — пользователь ввёл корректное значение;
• :user-invalid — введённые данные не прошли валидацию.
Главное преимущество — форма не показывает ошибку сразу при загрузке страницы. Это удобно для более аккуратной UX-валидации без JavaScript.
📣 Code Ready | #свойство
🖥 School App – дизайн приложения для школьников, который включает сочетания разных геометрических фигур и контрастные цвета.
Сайтодел | #макет #figma
Сайтодел | #макет #figma
🔥 Deep-Live-Cam — Python утилита для создания дипфейков в реальном времени даже на слабом ПК.
👨💻 Работает как на процессоре, так и на видеокарте и даже на M процессорах.
📸 Всё, что нужно — одна фотка и камера.
😄 Меняет лицо с учётом освещения, движений и поворотов головы — никаких багов, маска не «плавает» и не отваливается.
⚡️ Настройка занимает пару минут, а результат — как будто Голливуд приложился.
🔥 Представьте, вы выходите на Zoom, а вас зовут не Вася, а Бенедикт Камбербэтч. Или Чак Норрис.
Можно запугать коллег, троллить друзей или... ну вы поняли. Возможностей — миллион.
Установка простая, а для работы нужна всего одна фотография.
💻 Гайд по инсталяции
⚙️ GitHub/Инструкция
#python #soft #code
👨💻 Работает как на процессоре, так и на видеокарте и даже на M процессорах.
📸 Всё, что нужно — одна фотка и камера.
😄 Меняет лицо с учётом освещения, движений и поворотов головы — никаких багов, маска не «плавает» и не отваливается.
⚡️ Настройка занимает пару минут, а результат — как будто Голливуд приложился.
🔥 Представьте, вы выходите на Zoom, а вас зовут не Вася, а Бенедикт Камбербэтч. Или Чак Норрис.
Можно запугать коллег, троллить друзей или... ну вы поняли. Возможностей — миллион.
Установка простая, а для работы нужна всего одна фотография.
💻 Гайд по инсталяции
⚙️ GitHub/Инструкция
#python #soft #code