Frage

Nach der Beantwortung dieser Frage frage ich mich doch, warum removeChild braucht ein übergeordnetes Element. Immerhin konnten wir einfach tun

node.parentNode.removeChild(node);

Da der übergeordnete Knoten immer direkt mit dem Javascript / DOM-Motor verfügbar sein sollte, ist es nicht unbedingt notwendig, den übergeordneten Knoten des Knotens zu liefern, die entfernt werden soll.

Natürlich verstehe ich das Prinzip, dass removeChild ein Verfahren zur Herstellung eines DOM-Knoten ist, aber warum nicht so etwas wie document.removeNode exist (das lediglich einen beliebigen Knoten als Parameter akzeptiert)?

EDIT: mehr klar zu sein, die Frage ist: Warum hat die JS Motor Notwendigkeit, den übergeordneten Knoten überhaupt, wenn es bereits den (einmaligen) Knoten, der entfernt werden ist

War es hilfreich?

Lösung

Ich denke, es ist das Design einfach hält. Ein Knoten können existieren isoliert, sondern umso interessanter Fall ist der DOM-Baum. Mit removeChild, werden die Knoten entfernt muss ein Kind des Knotens, an dem die Methode aufgerufen wurde.

Getting eine Liste aller Kinder und einen manuellen Vergleich mit jedem tun, ist nicht, dass eine Operation teuer. Doch alle Nachkommen für einen Knoten zu suchen, die entfernt werden soll, ist in der Tat teuer.

Bearbeiten : Als Reaktion auf das Update, ein Browser einfach ist die Umsetzung der DOM spec , die ein removeChild Methode auf Node. Die Spezifikation, meiner Meinung nach , hat eindeutig und frei von Annahmen sein. Es ist ähnlich wie Dependency Injection aus dieser Perspektive. Der DOM-Core spec Modelle einen Baum unter Verwendung von Bausteinen wie Knoten, Element, usw. ein einsames Verfahren wie removeNode irgendwo in dieser Bausteine ??Addiereinrichtung Verfahren implizites Wissen über seine Umgebung hat -, daß sie ein Kind von einem bestimmten Knoten sein may, und es sollte von dort entfernt werden, wenn es ist.

Die Aufgabe der w3 ist eine sehr robuste API zu machen, die die meisten Dinge möglich macht. Sie sollten sich keine Sorgen über syntaktischer Zucker wie immer um die nativen APIs geschrieben werden, wenn sie gut geschrieben sind.

Andere Tipps

Die Verwirrung könnte sein, weil Sie vielleicht denken, ein Element Mittel, um etwas zu entfernen, wie das Töten oder es zu zerstören.

Aber in der Tat, das Konzept der Entfernung grundsätzlich Mittel bricht die Beziehung zwischen einem Kind und seinen Eltern. Es ist nur eine Ablösung.

Um daher ein Element zu entfernen, die keinen übergeordneten Knoten hat, macht keinen Sinn. Und es ist vernünftig, dass, wenn Sie diese Verbindung zwischen einem Elternteil und einem Kind lösen wollen, müssen Sie einen Verweis auf beide.

Das sagte, es stimmt, dass manchmal nur Sie will ein Kind von seinen Eltern entfernen, ohne Sorge um, dass Eltern überhaupt. Deshalb DOM Level 4 stellt den ChildNode -Schnittstelle, die die remove Methode.

Diese Schnittstelle implementiert wird von DocumentType , Element und CharacterData , so dass Sie es auf doctypes , Elemente und Text , Comment und ProcessingInstruction Knoten .

node Unter der Annahme, ist einer von ihnen, können Sie

node.remove();

Falls es bereits keinen übergeordneten Knoten hat, passiert nichts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top