Javascript Pro
2.51K subscribers
179 photos
30 videos
155 links
Канал для начинающих JavaScript разработчиков. Если вы приступаете к изучению JS - этот канал для вас.

Админ: @anothertechrock
Download Telegram
Node.normalize(): восстановление нормализованной формы текстовых узлов в DOM!

После операций с 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-узлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Вакансии Golang - наш канал это сборник вакансий по GO.

Что в канале?
1. Только свежие вакансии.
2. Каждая вакансия имеет телеграм аккаунт HR или Tech специалиста. Сразу можете писать им вопросы и отправлять резюме
3. Подборка топовых вакансий за последние 7 дней

Подписывайтесь, ищите работу, а так же присылайте свои вакансии нам в канал: Вакансии Golang
Перед тем как отправлять ещё 30 откликов, проверьте три вещи:

Понятно ли описан опыт?
Нормально ли резюме читается ATS?
Подходите ли вы под конкретную вакансию?

Всё это можно проверить в UpdateCV.me.

updatecv.me
👎1
Вакансия требует:
- Java
- Spring
- PostgreSQL
- Docker
- Kafka

У кандидата всё это реально есть.

Но в резюме:
"Backend development, работа с микросервисами, БД и очередями сообщений".

Кто виноват, если кандидат не попадёт на интервью?

Наш ответ:
Кандидат. Рекрутер не должен угадывать, что под "БД" имеется в виду PostgreSQL, а под "очередями" - Kafka. Если технология важна для вакансии и вы с ней реально работали - её нужно прямо и указывать.

А вы как считаете?

Если хотите проверить мэтч своего резюме с вакансией - переходите на updatecv.me
🤮1
Предположим у вас match с вакансией - 84%.

Совпадает к примеру:

✔️ API testing
✔️ SQL
✔️ Postman
✔️ Jira

Не хватает:
Playwright

Вы бы откликались на такую вакансию или нет? И почему?

Интересно сравнить мнение кандидатов

А если хотите проверить мэтч своего резюме с вакансией- заходите на https://updatecv.me/