Question

Après avoir répondu à cette question Je suis à me demander pourquoi removeChild a besoin d'un élément parent. Après tout, nous pourrions tout simplement faire

node.parentNode.removeChild(node);

En tant que nœud parent doit toujours être disponible directement au moteur Javascript / DOM, il n'est pas strictement nécessaire de fournir le nœud parent du nœud qui est à supprimer.

Bien sûr, je comprends le principe selon lequel removeChild est une méthode d'un nœud DOM, mais pourquoi ne pas quelque chose comme exist de document.removeNode (qui accepte simplement un noeud arbitraire en tant que paramètre)?

EDIT: Pour être plus clair, la question est: pourquoi le moteur JS besoin le nœud parent du tout, si elle a déjà le nœud (unique) qui est à supprimer

Était-ce utile?

La solution

Je pense qu'il maintient le design simple. Un noeud peut existent dans l'isolement, mais le cas le plus intéressant est l'arbre DOM. Avec removeChild, le nœud à supprimer doit être un enfant du nœud sur lequel la méthode a été appelée.

Obtenir une liste de tous les enfants et de faire une comparaison manuelle contre chacun n'est pas une opération coûteuse. Cependant, la recherche de tous les descendants d'un noeud qui doit être enlevé est en effet coûteux.

Modifier : En réponse à votre mise à jour, un navigateur met en œuvre simplement DOM spec , qui définit un removeChild méthode sur Node. Les spécifications, à mon avis , doit être sans ambiguïté et sans hypothèses. Il est similaire à injection de dépendances dans cette perspective. Les modèles spécifications DOM de base d'un arbre en utilisant des blocs de construction tels que le nœud, élément, etc. Ajout d'une méthode seule, comme quelque part de removeNode dans ces blocs de construction signifie que la méthode a connaissance implicite de son environnement - qu'il may être un enfant d'un noeud, et il doit être retiré de là si elle est.

La tâche de w3 est de faire une API très robuste qui fait la plupart des choses possibles. Ils ne devraient pas vous soucier de sucre syntaxique qui peut toujours être écrit autour des API natives si elles sont bien écrits.

Autres conseils

La confusion pourrait être parce que vous pourriez penser la suppression d'un moyen d'élément quelque chose comme tuer ou détruire.

Mais en fait, le concept de essentiellement des moyens rompre la relation entre un enfant et son parent. Il est juste un détachement.

Par conséquent, la suppression d'un élément qui n'a pas de noeud parent n'a aucun sens. Et il est raisonnable que, si vous voulez briser ce lien entre un parent et un enfant, vous avez besoin d'une référence à la fois.

Cela dit, il est vrai que, parfois, vous voulez juste retirer un enfant de son parent, sans se soucier de ce parent du tout. Voilà pourquoi DOM niveau 4 introduit ChildNode interface, qui fournit les remove procédé.

Cette interface est implémentée par DocumentType , Element et CharacterData , de sorte que vous pouvez l'utiliser sur doctypes , et Text , Comment et ProcessingInstruction noeuds .

En supposant node est l'un de ceux-ci, vous pouvez utiliser

node.remove();

Dans le cas où il a déjà aucun nœud parent, rien ne se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top