Fehler beim Ausführen von 'appendChild' auf 'Node': Nur ein Element im Dokument erlaubt

8

Ich versuche, eine externe SVG-Datei zu laden und schreibe dann zusätzliche SVG-Elemente darüber. Wenn ich das tue, erhalte ich den Fehler "AppendChild konnte nicht auf 'Node' ausgeführt werden: Nur ein Element im Dokument erlaubt." wenn ich in Chrome inspiziere.

Hier ist der HTML-Code:

%Vor%

Hier ist problem.js:

%Vor%

... und hier ist drawing.svg, von einigen Inkscapy cruft befreit:

%Vor%

Der Fehler tritt auf, wenn Sie auf den Kreis klicken: das Rechteck, das in der importierten Zeichnung mit zwei Rechteck angezeigt werden soll, wird nicht angezeigt und die Fehlermeldung "Ausführen von 'appendChild' auf 'Node': Nur ein Element ist aktiviert Dokument erlaubt. " wird in der Konsole angezeigt.

Wenn ich das so ändere, wird das Rechteck zum svg hinzugefügt, der den Kreis enthält, d. h. durch Auskommentieren der Zeile "// mySvg.appendChild (svgRect);", dann wird das Rechteck erfolgreich angezeigt.

Ich weiß auch, dass die Zeichnungsdatei erfolgreich geladen wird, weil ich in anderem Code (der aus Gründen der Kürze hier nicht enthalten ist) die Farben der Rechtecke innerhalb dieser Datei ändern kann. Es scheint also, dass ich auf vorhandene Elemente innerhalb der Datei zugreifen kann, aber keine Elemente hinzufügen kann.

Gibt es etwas über extern geladene SVGs gegenüber Inline-SVGs, die ich nicht in Betracht ziehe?

Eine letzte Sache - das geht in eine Cordova-App, also möchte ich es klein halten, so dass reine JavaScript-Lösungen bevorzugt werden. Ich werde JQuery oder SnapSVG verwenden, wenn ich muss, aber es scheint, dass meine Bedürfnisse ausreichend einfach sind, dass es möglich sein sollte, dies ohne externe Bibliotheken zu tun.

    
William Whyte 23.12.2016, 14:58
quelle

2 Antworten

10

Es besteht ein Unterschied zwischen dem Wurzelknoten eines Dokuments und dem Dokumentelement. Was Sie wollen, ist das Dokumentelement <svg> , aber .contentDocument bringt Sie zum Wurzelknoten.

Der Wurzelknoten ist eine Hierarchieebene weiter oben. Das heißt, das Dokumentelement <svg> befindet sich im Stammknoten und der Stammknoten kann nur dieses eine <svg> untergeordnete Element haben.

Um das Dokumentelement zu erhalten, tun Sie Folgendes:

%Vor%     
Thomas W 23.12.2016, 19:26
quelle
3

In meinem Fall hat sich das DOM beschwert, weil ich versucht habe, im Dokument ein Kind hinzuzufügen:

%Vor%

Ich habe es gelöst, indem ich einen Verweis auf das body-Tag bekommen habe:

%Vor%     
Luillyfe 22.02.2018 22:50
quelle

Tags und Links