A resposta atualmente aceita está errada em innerHTML
ser mais lenta (pelo menos no IE e no Chrome), como m93a mencionado corretamente.
Chrome e FF são muito mais rápidos usando este método (que destruirá os dados do jquery anexado):
var cNode = node.cloneNode(false);
node.parentNode.replaceChild(cNode, node);
em um segundo distante para FF e Chrome e mais rápido no IE:
node.innerHTML = '';
O InnerHTML não destruirá seus manipuladores de eventos nem quebrará as referências a jquery , também é recomendado como uma solução aqui:
https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML .
O método de manipulação do DOM mais rápido (ainda mais lento que os dois anteriores) é a remoção do intervalo, mas os intervalos não são suportados até o IE9.
var range = document.createRange();
range.selectNodeContents(node);
range.deleteContents();
Os outros métodos mencionados parecem ser comparáveis, mas muito mais lentos que o innerHTML, exceto o jquery (1.1.1 e 3.1.1), que é consideravelmente mais lento que qualquer outra coisa:
$(node).empty();
Evidência aqui:
http://jsperf.com/innerhtml-vs-removechild/167 http://jsperf.com/innerhtml-vs-removechild/300
https://jsperf.com/remove-all-child-elements-of-a- dom-node-in-javascript
(Novo URL para reinicialização do jsperf porque a edição do URL antigo não está funcionando)
O "loop por teste" do Jsperf geralmente é entendido como "por iteração", e somente a primeira iteração tem nós para remover, de modo que os resultados não fazem sentido; no momento da postagem, havia testes nesse segmento configurados incorretamente.