Thorsten Sperber: eingebettetes SVG-Dokument zurücksetzen/leeren

Hi,

in einer Webanwendung beschreibe ich eine SVG-Datei in einem Browser, genauer gesagt steht die SVG-Datei mit embed im Code.

<embed name="svgDrawing" width="750" height="300" src="svg-template.svg" type="image/svg+xml" id="svgWindow" />

Diese Datei bearbeite ich mit JS. Das Problem, das ich habe, ist das Löschen bzw. Leeren. Die Datei ist zunächst leer, und ich muss die Datei auch wieder dahin zurücksetzen können. Folgender Code sollte das für mich tun:

  
function clearSVG()  
 {  
 // lausiger Versuch ;)  
 //document.getElementById("svgWindow").src = "svg-template.svg";  
  
 var svgns="http://www.w3.org/2000/svg";  
 var svgdoc=document.embeds["svgDrawing"].getSVGDocument();  
 var svgroot=svgdoc.documentElement;  
  
 // JQuery-Funktion, leider nur für html?  
 $("#svgWindow").empty();  
  
  
 // Kontrollausgabe  
 var string = (new XMLSerializer()).serializeToString(svgroot);  
 // alert(string);  
 debug_log(string);  
  
 // zeigt mir den Finger...argh  
 for (var i=0; i<svgroot.childNodes.length; i++)  
  {  
  svgroot.removeChild(svgroot.childNodes[i]);  
  }  
 }  

Leider funktionierts nicht...es entfernt die Elemente brockenweise.
Wie gehts noch? Danke :)

gruß, Thorsten

  1. Hat sich erledigt. Der Fehler dabei ist der folgende:

    Lösche ich in einem (beliebigen) Array Element i, dann ist das, was vorher i+1 war, ja i und damit greife ich im nächsten Schritt auf das übernächste Element (i+2) zu...dummer Fehler, zugegebenermaßen.

    1. Hi,

      Lösche ich in einem (beliebigen) Array Element i, dann ist das, was vorher i+1 war, ja i und damit greife ich im nächsten Schritt auf das übernächste Element (i+2) zu...

      Wenn man das nicht einfach mit einer While-Schleife a la Herodes loesen mag - "so lange es noch ein naechtes Kind gibt, entferne es" - kann man auch einfach die For-Schleife rueckwaerts laufen lassen - damit entfernt man immer das aktuell letzte Kind, und es gibt kein "Nachrutschen".

      MfG ChrisB

      1. Hi,

        Wenn man das nicht einfach mit einer While-Schleife a la Herodes loesen
        mag - "so lange es noch ein naechtes Kind gibt, entferne es" - kann man
        auch einfach die For-Schleife rueckwaerts laufen lassen - damit entfernt
        man immer das aktuell letzte Kind, und es gibt kein "Nachrutschen".

        So hab ich das auch dann gelöst ;)