В настоящее время принят неправильный ответ о том, innerHTML
что он медленнее (по крайней мере, в IE и Chrome), как правильно заметил m93a.
Chrome и FF значительно быстрее, используя этот метод (который уничтожит прикрепленные данные jquery):
var cNode = node.cloneNode(false);
node.parentNode.replaceChild(cNode, node);
в отдаленную секунду для FF и Chrome, и самый быстрый в IE:
node.innerHTML = '';
InnerHTML не разрушит ваши обработчики событий и не нарушит ссылки на jquery , также рекомендуется в качестве решения здесь:
https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML .
Самый быстрый метод манипулирования DOM (все еще медленнее, чем предыдущие два) - это удаление Range, но диапазоны не поддерживаются до IE9.
var range = document.createRange();
range.selectNodeContents(node);
range.deleteContents();
Другие упомянутые методы кажутся сопоставимыми, но намного медленнее, чем innerHTML, за исключением выброса jquery (1.1.1 и 3.1.1), который значительно медленнее, чем что-либо еще:
$(node).empty();
Доказательства здесь:
http://jsperf.com/innerhtml-vs-removechild/167 http://jsperf.com/innerhtml-vs-removechild/300
https://jsperf.com/remove-all-child-elements-of-a- дом-узел-в-JavaScript
(новый URL для перезагрузки jsperf, потому что редактирование старого URL не работает)
«Цикл за тест» в Jsperf часто понимается как «за итерацию», и только у первой итерации есть узлы для удаления, поэтому результаты не имеют смысла, на момент публикации в этом потоке были неправильно настроены тесты.