Замена всех дочерних элементов HTMLElement? - PullRequest
24 голосов
/ 14 февраля 2011

В моем коде мне довольно часто требуется заменить все дочерние элементы определенного контейнера HTML новым списком дочерних элементов.

Какой самый быстрый способ сделать это?Мой текущий подход заключается в сборе всех новых элементов в DocumentFragment.Единственный способ, который я нашел, чтобы затем заменить детей, - это удалить всех детей одного за другим и добавить фрагмент.Нет ли более быстрого способа?

Примечание: решение не должно быть кросс-браузерным, но предпочтительно не должно требовать сторонних компонентов, таких как jQuery.Целевым устройством является WebKit на очень медленном процессоре, поэтому мне нужно сохранять полный контроль над всеми перекомпоновками.

Ответы [ 3 ]

33 голосов
/ 14 февраля 2011

Если вы просто хотите заменить все дочерние элементы, в зависимости от типа, почему бы вам просто не установить его содержимое на '', а затем добавить свой код:

container.innerHTML = '';
container.appendChild( newContainerElements );

, который в основном удалит вседети в кратчайшие сроки:)

5 голосов
/ 13 августа 2017

Используйте современные JS!Непосредственно используйте remove вместо removeChild

while (container.firstChild) {
    container.firstChild.remove();
}

В качестве альтернативы:

let child;
while (child = container.firstChild) {
    child.remove();
}
1 голос
/ 30 мая 2017

Возможная альтернатива, когда настройка innerHTML не работает:

while(container.firstChild)
{
  container.removeChild(container.firstChild);
}
container.appendChild(newChild)
...