Pergunta

Depois de responder essa questão Fico me perguntando por que removeChild precisa de um elemento pai. Afinal, poderíamos simplesmente fazer

node.parentNode.removeChild(node);

Como o nó pai deve estar sempre disponível diretamente para o mecanismo JavaScript/DOM, não é estritamente necessário fornecer o nó pai do nó que deve ser removido.

Claro que entendo o princípio que removeChild é um método de um nó DOM, mas por que não é algo como document.removeNode existe (que apenas aceita um nó arbitrário como parâmetro)?

EDITAR: Para ser mais claro, a pergunta é: por que o mecanismo JS precisa do nó pai, se já possui o nó (único) que será removido?

Foi útil?

Solução

Eu acho que isso mantém o design simples. Um nó poderia Existe isoladamente, mas o caso mais interessante é a árvore dom. Com removeChild, o nó a ser removido deve ser um filho do nó no qual o método foi chamado.

Obter uma lista de todas as crianças e fazer uma comparação manual contra cada uma não é uma operação tão cara. No entanto, pesquisar todos os descendentes por um nó a ser removido é realmente caro.

Editar: Em resposta à sua atualização, um navegador está simplesmente implementando o DOM Spec, que define um removeChild método em Node. A especificação, Na minha opinião, tem que ser inequívoco e livre de suposições. É similar à Injeção de dependência a partir dessa perspectiva. O DOM Core Special modela uma árvore usando blocos de construção, como nó, elemento, etc. Adicionando um método solitário como removeNode Em algum lugar desses blocos de construção significa que o método tem conhecimento implícito sobre seu ambiente - que may Seja um filho de algum nó e deve ser removido a partir daí, se for.

A tarefa do W3 é criar uma API muito robusta, o que torna a maioria das coisas possíveis. Eles não devem se preocupar com o açúcar sintático, pois isso sempre pode ser escrito em torno das APIs nativas se estiverem bem escritas.

Outras dicas

A confusão pode ser porque você pode pensar que remover um elemento significa algo como matá -lo ou destruí -lo.

enter image description here

Mas, de fato, o conceito de remoção Basicamente, significa quebrar o relacionamento entre uma criança e seus pais. É apenas um desapego.

enter image description here

Portanto, remover um elemento que não possui nó pai não faz sentido. E é razoável que, se você quiser quebrar essa conexão entre um pai e um filho, precisará de uma referência a ambos.

Dito isto, é verdade que às vezes você só quer remover um filho de seus pais, sem se preocupar com esse pai. É por isso que o DOM Nível 4 apresenta o ChildNode interface, que fornece o remove método.

Essa interface é implementada por DocumentType, Element e CharacterData, então você pode usá -lo em Doctypes, elementos e Text, Comment, e ProcessingInstruction nós.

Assumindo node é um deles, você pode usar

node.remove();

Caso ele já não tenha um nó pai, nada acontece.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top