Ao remover um elemento com JavaScript padrão, você deve ir primeiro ao pai:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Ter que ir primeiro ao nó pai parece um pouco estranho para mim; existe uma razão para o JavaScript funcionar assim?
javascript
Zaz
fonte
fonte
element.remove()
diretamente a partir do ES5. Você não precisa dos pais!Respostas:
Sei que aumentar as funções DOM nativas nem sempre é a melhor ou a mais popular solução, mas isso funciona bem para navegadores modernos.
E então você pode remover elementos como este
ou
Nota: esta solução não funciona para o IE 7 e abaixo. Para mais informações sobre como estender o DOM, leia este artigo .
Edição : Revendo minha resposta em 2019,
node.remove()
chegou ao resgate e pode ser usada da seguinte maneira (sem o polyfill acima):ou
Essas funções estão disponíveis em todos os navegadores modernos (não no IE). Leia mais sobre MDN .
fonte
NodeList
ouHTMLCollection
que são um conjunto de elementos do tipo matriz. A segunda definição de método permite que esses "conjuntos de elementos" sejam removidos.document.getElementsByClassName("my-elements").remove();
. Editar: na verdade, ele exclui um monte, mas requer a execução novamente para concluir. Experimente nesta página com a classe "comment-copy".Crossbrowser e IE> = 11:
fonte
$.ready
alternativa mais rápida do que js para asnoscript
tags. Para usá-lo como eu queria, tive que envolvê-lo em umasetTimeout
função de 1ms . Isso resolve todos os meus problemas de uma só vez. Gracias.outerHTML
se de que ainda é uma nova adição ao padrão. Se você estiver procurando por suporte para qualquer software> 6 no momento da redação, precisará de outra solução. Aremove
função mencionada por outros é um caso semelhante. Como de costume, é seguro implementar um polyfill.delete element
não faz nada, como você pode não variáveis de exclusão em JS, apenas chaves;) Verifique por si mesmo ele não funciona porconsole.log(element)
depoisdelete element
...removeChild
(cerca de 6-7% no meu sistema). Veja jsperf.com/clear-outerhtml-v-removechild/2Você poderia criar uma
remove
função para não precisar pensar nisso toda vez:fonte
elem
pararemove.elem
. Dessa forma, a função se referencia a si mesma, para que você não precise criar outra variável global. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
É o que o DOM suporta . Pesquise nessa página por "remover" ou "excluir" e removeChild é o único que remove um nó.
fonte
element.remove();
irá funcionar. Talvez seja algo novo. Mas a primeira vez para mim e funciona. Eu acho que deveria ter funcionado sempre, pois é muito básico, deve ter coisas.O DOM está organizado em uma árvore de nós, em que cada nó tem um valor, juntamente com uma lista de referências aos seus nós filhos. Portanto,
element.parentNode.removeChild(element)
imita exatamente o que está acontecendo internamente: primeiro, você acessa o nó pai e remove a referência ao nó filho.A partir de DOM4, uma função auxiliar é fornecida para fazer a mesma coisa:
element.remove()
. Isso funciona em 87% dos navegadores (a partir de 2016), mas não no IE 11. Se você precisar oferecer suporte a navegadores antigos, poderá:fonte
Para remover um elemento:
Para remover todos os elementos com, por exemplo, um determinado nome de classe:
fonte
if(list[i] && list[i].parentElement)
linha é necessária? A existência de cada elemento não é garantida pelo fato de ter sido retornado pelogetElementsByClassName
método?document.getElementsByClassName(...
você pode apenas usar
element.remove()
fonte
element.remove()
não é JavaScript válido e funciona apenas em alguns navegadores, como o Chrome .element.remove()
é JavaScript válido com DOM4 e funciona em todos os navegadores modernos, naturalmente, com exceção do Internet Explorer.O
ChildNode.remove()
método remove o objeto da árvore à qual ele pertence.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Aqui está um violino que mostra como você pode ligar
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Não há necessidade de estender o NodeList. Já foi implementado.
**
fonte
Você pode remover diretamente esse elemento usando o
remove()
método DOM.aqui está um exemplo:
fonte
De acordo com o DOM nível 4 dados técnicos, que é a versão atual em desenvolvimento, existem alguns novos métodos calhar mutação disponíveis:
append()
,prepend()
,before()
,after()
,replace()
, eremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
fonte
O nome da função é
removeChild()
e como é possível remover o filho quando não há pai? :)Por outro lado, você nem sempre precisa chamá-lo como mostrou.
element.parentNode
é apenas um auxiliar para obter o nó pai do nó fornecido. Se você já conhece o nó pai, pode usá-lo da seguinte maneira:Ex:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
==================================================== =======
Para adicionar algo mais:
Algumas respostas apontaram que, em vez de usar
parentNode.removeChild(child);
, você pode usarelem.remove();
. Mas como eu notei, há uma diferença entre as duas funções, e isso não é mencionado nessas respostas.Se você usar
removeChild()
, ele retornará uma referência ao nó removido.Mas se você usar
elem.remove();
, não retornará a referência.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Esse comportamento pode ser observado no Chrome e no FF. Eu acredito que vale a pena notar :)
Espero que minha resposta agregue algum valor à pergunta e seja útil!
fonte
As funções que usam ele.parentNode.removeChild (ele) não funcionarão para elementos que você criou, mas ainda não inseriu no HTML. Bibliotecas como jQuery e Prototype sabiamente usam um método como o seguinte para evitar essa limitação.
Penso que o JavaScript funciona assim porque os designers originais do DOM consideravam a navegação pai / filho e a navegação anterior / seguinte como uma prioridade mais alta do que as modificações DHTML que são tão populares hoje em dia. Ser capaz de ler de um <input type = 'text'> e escrever para outro por localização relativa no DOM foi útil em meados dos anos 90, uma época em que a geração dinâmica de formulários HTML inteiros ou elementos interativos da GUI quase não brilhava. olho de algum desenvolvedor.
fonte
IMHO: A razão para isso é a mesma que já vi em outros ambientes: você está executando uma ação com base no seu "link" para algo. Você não pode excluí-lo enquanto estiver vinculado a ele.
Como cortar um galho de árvore. Sente-se no lado mais próximo da árvore durante o corte ou o resultado será ... infeliz (embora engraçado).
fonte
Este, na verdade, vem do FireFox ... pela primeira vez, o IE estava à frente do pacote e permitiu a remoção de um elemento diretamente.
Essa é apenas minha suposição, mas acredito que a razão pela qual você deve remover um filho através dos pais deve-se a um problema com a maneira como o FireFox lidou com a referência.
Se você chama um objeto para confirmar o hari-kari diretamente, imediatamente após a morte, você ainda mantém essa referência a ele. Isso tem o potencial de criar vários erros desagradáveis ... como não removê-lo, removê-lo, mas mantendo referências válidas ou simplesmente um vazamento de memória.
Acredito que, quando eles perceberam o problema, a solução alternativa era remover um elemento por meio do pai, porque, quando o elemento desapareceu, você agora está simplesmente mantendo uma referência ao pai. Isso interromperia todo esse desagradável e (se o fechamento de um nó de árvore por nó, por exemplo) seria "bastante eficiente".
Deveria ser um bug facilmente corrigível, mas, como em muitas outras coisas na programação da web, o lançamento provavelmente foi apressado, levando a isso ... e quando a próxima versão apareceu, havia pessoas o usando para mudar isso. para quebrar um monte de código.
Novamente, tudo isso é simplesmente meu palpite.
No entanto, aguardo com expectativa o dia em que a programação na Web finalmente terá uma limpeza completa na primavera, todas essas pequenas idiossincrasias estranhas serão limpas e todos começarão a jogar pelas mesmas regras.
Provavelmente no dia seguinte ao meu servo-robô me processar por salários atrasados.
fonte
removeChild
é um método da interface do nível 1Node
do DOM .Pelo que entendi, a remoção direta de um nó não funciona no Firefox, apenas no Internet Explorer. Portanto, para dar suporte ao Firefox, você precisa ir até o pai para remover o filho.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
fonte
fonte
Esta é a melhor função para remover um elemento sem erro de script:
Nota para
EObj=document.getElementById(EId)
.Este é um sinal de igual que não
==
.se o elemento
EId
existe, a função o remove; caso contrário, retorna false, nãoerror
.fonte