Задать вопрос
@Alex_87

Как удалять предыдущий DOM элемент при появлении нового элемента контейнера?

Добрый вечер! При вводе в input название города, в контейнер из массива добавляется список город, соответствующий введённой в input символам. Мне необходимо, чтобы при введении каждой следующей буквы, элементы li полностью обновлялись. Помогите пожалуйста этого добиться:
https://codepen.io/Alexei_87/pen/gOwpwzL?editors=1010
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Можно перезаписывать разметку:

filterInput.addEventListener('input', function() {
  const value = this.value.toLowerCase();

  filterResult.innerHTML = resultArr
    .filter(n => n.toLowerCase().includes(value))
    .map(n => `<li>${n}</li>`)
    .join('');
});

Или, удалять существующие элементы и создавать новые:

filterInput.addEventListener('input', e => {
  const value = e.target.value.toLowerCase();

  filterResult.replaceChildren(...resultArr.reduce((acc, n) => {
    if (n.toLowerCase().indexOf(value) !== -1) {
      (acc[acc.length] = document.createElement('li')).textContent = n;
    }
    return acc;
  }, []));
});

Или, удалять лишние элементы и создавать недостающие, затем обновлять содержимое элементов:

filterInput.addEventListener('input', () => {
  const value = filterInput.value.toLowerCase();
  const r = resultArr.filter(n => ~-n.toLowerCase().split(value).length);
  const c = filterResult.children;

  for (; c.length > r.length; filterResult.lastElementChild.remove()) ;
  for (; c.length < r.length; filterResult.append(document.createElement('li'))) ;

  r.forEach((n, i) => c[i].innerText = n);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы