Выбор ответа Middle DOM API обновлено

Подвох innerHTML +=

Вопрос

В контейнере есть кнопка с обработчиком, навешанным через addEventListener. Что случится с ней после кода?

container.innerHTML += '<p>Новый абзац</p>';

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Кнопка будет пересоздана из HTML, обработчик пропадёт. a += b это чтение строки разметки и полная её перезапись.

Варианты ответа

  1. Кнопка останется тем же узлом, обработчик сохранится
  2. Кнопка будет пересоздана из HTML, обработчик пропадётправильный ответ
  3. Кнопка исчезнет со страницы вместе со своим обработчиком
  4. Код упадёт: у innerHTML нельзя использовать +=

Разбор

a += b это чтение строки разметки и полная её перезапись. Браузер выбрасывает старых потомков и парсит HTML заново, кнопка становится новым узлом без обработчиков (и теряется состояние полей ввода). Узел не сохраняется, но и не исчезает: в строке разметки кнопка есть. Синтаксической проблемы нет. Добавлять безопаснее через append или insertAdjacentHTML.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме