Domanda

Dopo aver risposto a questa domanda sono lasciato chiedendo perché removeChild ha bisogno di un elemento padre. Dopo tutto, si potrebbe semplicemente fare

node.parentNode.removeChild(node);

Poiché il nodo principale deve essere sempre disponibile direttamente al motore JavaScript / DOM, non è strettamente necessario per fornire il nodo padre del nodo che deve essere rimosso.

Naturalmente capisco il principio che removeChild è un metodo di un nodo DOM, ma perché non fa qualcosa di simile document.removeNode exist (che semplicemente accetta un nodo arbitrario come parametro)?

Modifica Per essere più chiari, la domanda è: perché fa il motore di necessità JS il nodo principale a tutti, se ha già il nodo (unico) che è da rimuovere

È stato utile?

Soluzione

Penso che mantiene il design semplice. Un nodo possono esiste in isolamento ma il caso più interessante è l'albero DOM. Con removeChild, il nodo da rimuovere deve essere figlio del nodo su cui è stato chiamato il metodo.

Ottenere un elenco di tutti i bambini e facendo un confronto manuale contro l'non è costoso un'operazione. Tuttavia, tutti i discendenti ricerca di un nodo che deve essere rimossa è davvero costoso.

Modifica : In risposta alla tua aggiornamento, un browser viene semplicemente attuando il DOM spec , che definisce una removeChild metodo su Node. Le specifiche, a mio parere , deve essere univoca e priva di presupposti. E 'simile a Dependency Injection da quella prospettiva. Il DOM core spec modelli un albero utilizzando blocchi da costruzione come Node, Element, ecc Aggiunta di un metodo solitario come removeNode da qualche parte in questi blocchi mezzi il metodo ha conoscenza implicita sul suo ambiente - che may essere un figlio di qualche nodo, e dovrebbe essere rimosso da lì se lo è.

Il compito di w3 è quello di fare un API molto robusto che rende possibile la maggior parte delle cose. Essi non devono preoccuparsi di zucchero sintattico come che può sempre essere scritto intorno alle API native se sono ben scritti.

Altri suggerimenti

La confusione potrebbe essere perché si potrebbe pensare la rimozione di un mezzo elemento qualcosa come uccidere o distruggerlo.

entrare descrizione dell'immagine qui

Ma in realtà, il concetto di rimozione fondamentalmente mezzi la rottura del rapporto tra un bambino e il suo genitore. E 'solo un distacco.

entrare descrizione dell'immagine qui

Pertanto, la rimozione di un elemento che non ha nodo padre non ha senso. Ed è ragionevole che, se si vuole rompere quel legame tra un genitore e un bambino, è necessario un riferimento sia.

Detto questo, è vero che a volte si desidera solo per rimuovere un bambino dal suo genitore, senza preoccuparsi di quel genitore a tutti. Ecco perché DOM Livello 4 introduce il ChildNode di interfaccia, che fornisce la remove metodo.

Questa interfaccia viene implementata da DocumentType , Element e CharacterData , in modo da poter utilizzare su doctype , elementi e Text , Comment e ProcessingInstruction nodi .

Supponendo node è uno di questi, è possibile utilizzare

node.remove();

Nel caso in cui già ha alcun nodo padre, non succede nulla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top