Коротка відповідь
juniorinnerHTML — це рядок, що містить повний HTML‑вміст елемента; innerText — це текстовий вміст без тегів, що враховує стилі видимості. При присвоєнні innerHTML браузер парсить HTML і створює DOM‑елементи, а при присвоєнні innerText вставляється лише текст. При читанні обидва повертають рядок, але innerText пропускає скрипти та приховані елементи.
Повне пояснення
Що це і навіщо
- innerHTML – властивість, що повертає або встановлює повний HTML‑вміст елемента. Використовується, коли потрібно динамічно вставити або отримати структуру DOM‑елементів.
- innerText – повертає лише видимий текст елемента, з урахуванням стилів (наприклад,
display:noneабоvisibility:hidden). Підходить для отримання чистого тексту без тегів.
Ключові принципи
innerHTMLрозбирає рядок як HTML, створюючи нові вузли DOM.innerTextне парсить HTML, а просто повертає текстовий вузол.- Обидва властивості синхронні: при записі DOM оновлюється одразу.
Як це працює
- Читання: браузер читає внутрішній вміст елемента.
innerHTMLповертає рядок, що містить теги і атрибути.innerTextповертає текст, що відображається користувачу.
- Запис: браузер замінює існуючий вміст.
innerHTMLпарсить новий рядок і створює/видаляє вузли.innerTextвставляє текст як простий текстовий вузол, не створюючи тегів.
Практика і реалізація (JS/TS)
const div = document.createElement('div');
div.innerHTML = '<p>Hello <strong>world</strong></p>';
console.log(div.innerText); // "Hello world"
const span = document.querySelector('#mySpan')!;
span.innerText = 'Привіт'; // вставляє лише текст
Тестування
- Jest:
expect(element.innerHTML).toBe('<b>Bold</b>'); - Playwright:
await page.locator('#id').innerText();для перевірки видимого тексту.
Безпека
- Використання
innerHTMLз неперевіреним вмістом може викликати XSS. Завжди очищайте дані перед вставкою.
Оптимізація
- Якщо потрібен лише текст, використовуйте
textContentзамістьinnerTextдля кращої продуктивності. - Для великих блоків HTML краще створювати DOM‑елементи через
document.createElementі додавати їх у фрагмент, а потім вставляти один раз.
Часті помилки
- Вставка скриптів через innerHTML → XSS.
- Очікування, що innerText поверне HTML – помилкове розуміння.
- Використання innerText у браузерах без підтримки – варто перевіряти
textContent. - Неправильне очищення – не видаляє атрибути, що містять небезпечний код.
- Використання innerHTML для великих блоків → перерисовка DOM.
- Заміна innerText на innerHTML → втрати форматування.
- Не враховує стилі видимості – innerText може повернути текст з
display:none. - Проблеми з локалізацією – innerText не враховує
dirатрибут.
Cheatsheet
- innerHTML: HTML‑рядок → DOM вузли.
- innerText: текст без тегів, враховує видимість.
- textContent: чистий текст без стилів, швидше за innerText.