Como destruir um elemento DOM com jQuery?

141

Suponha que o objeto jQuery seja $target.

AMD
fonte

Respostas:

194

É o $target.remove();que você está procurando?

https://api.jquery.com/remove/

Jourkey
fonte
75
É claro que isso apenas o remove do documento visível. Se houver outras referências ao nó do JavaScript, como a própria variável $ target, o objeto escapará do coletor de lixo por enquanto. Se você quiser destruí-lo, também precisará perder todas as referências a ele. Não sei ao certo por que você desejaria DESTRUIR um elemento DOM. Talvez você apenas odeie $ target. Alvo pobre de $, o que isso fez com você?
9990
52
$ target é gentil quando ele está sozinho, mas ele fica desagradável quando está perto de seus 100.000 amigos clonados.
Sebastián Grignoli
2
Terá .empty()um efeito semelhante?
Saurabh Nanda
3
@SaurabhNanda - Empty removerá o conteúdo do objeto, mas não removerá (nem destruirá) o próprio objeto.
Lucas
46

Se você quer destruir completamente o alvo, você tem algumas opções. Primeiro você pode remover o objeto do DOM como descrito acima ...

console.log($target);   // jQuery object
$target.remove();       // remove target from the DOM
console.log($target);   // $target still exists

Opção 1 - Em seguida, substitua o destino por um objeto jQuery vazio (jQuery 1.4+)

$target = $();
console.log($target);   // empty jQuery object

Opção 2 - ou exclua completamente a propriedade (causará um erro se você a referenciar em outro lugar)

delete $target;
console.log($target);   // error: $target is not defined

Mais informações : informações sobre o objeto jQuery vazio e informações sobre exclusão

Lucas
fonte
3
Por delete $targetque não vai funcionar: perfectionkills.com/understanding-delete/#misconceptions Por que não vai $target=nullfuncionar?
LeeGee
@LeeGee - Você pode resumir sua postagem para explicar por que a exclusão não funciona para objetos jQuery? Por que parece funcionar quando olhamos para console.log ($ target) no final? Obrigado.
Lucas
Não posso explicar melhor do que o artigo citado, que achei muito detalhado.
LeeGee
Para o registro, isso funciona no console porque o console avalia JS no escopo de avaliação, o que permite excluir. Variáveis ​​em escopos "naturais" não serão excluídas. Use em $target=nullvez disso. É mais rápido e não interfere nas otimizações internas do navegador.
22414 bendman
1
Excluir está bom. Significa apenas que o bloco não será otimizado pelo mecanismo JS. Na maioria dos casos, isso é totalmente irrelevante. Quando se torna um problema, você procura maneiras de usar o delete. Não antes.
Charlie Martin