Artis: Kindelemente austauschen

Hallo Leute.
Ich hab da ein kleines Problem mit dem ich einfach nicht weiterkomme.
Und zwar habe ich ein Element <div id="map"></div> und dort wird öfter durch Ajax mit appendChild() ein Element <map></map> eingefügt. Da das aber zu Fehlern im script führt habe ich appendChild() was dafür natürlich falsch war durch replaceChild() ausgetauscht. Das sieht nun so aus:
document.getElementById("map").replaceChild(map,document.getElementById("map").firstChild);

Das hat aber irgendwie nicht funktioniert. Ich hab zu Testzwecken das Div-Element umgeschrieben, <div id="map">test</div> um zu sehen ob die JavaScript anweisung auch richtig ausgeführt wird, denn mit dem DOM-Inspector, zu dem man mir mal geraten hat, kann ich das nicht nachvollziehen.

Scheinbar werden nun bei jedem Abgleichen durch Ajax immer mehr map-Elemente ins Div-Element geschrieben, wodurch die Elemente einfach nicht mehr funktionieren. So fallen immer mehr Area-Elemente aus und sind nicht mehr zu benutzen. Dadurch bin ich auch erst auf den Fehler aufmerksam geworden, das immer mehr Area ausfallen umso öfter der Ajax-Abgleich stattfindet.

Ich hoffe ihr könnt mir helfen wie genau ich erreichen kann das im Div-Element immer nur das aktuelle Map-Element drinsteckt.

Danke schon mal im vorraus :)

  1. hi,

    Und zwar habe ich ein Element <div id="map"></div> und dort wird öfter durch Ajax mit appendChild() ein Element <map></map> eingefügt. Da das aber zu Fehlern im script führt habe ich appendChild() was dafür natürlich falsch war durch replaceChild() ausgetauscht. Das sieht nun so aus:
    document.getElementById("map").replaceChild(map,document.getElementById("map").firstChild);

    Das hat aber irgendwie nicht funktioniert.

    Hast du überprüft, ob das, was du da austauscht - firstChild - auch wirklich das ist, was du austauschen _willst_?

    Bspw. solltest du berücksichtigen, dass Whitespace zwischen Elementen je nach Browser auch Kindknoten darstellt ...

    Sonst probier doch mal, gezielt das/ein Map-Element zum Austauschen auszuwählen - per getElementsByTagName.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke für deine Antwort.
      Also die Elemente werden reingeschrieben, da schon das erste map-element das ich benutze durch die JavaScript Funktion ins Div-Element geschrieben wird.
      Somit wird auf jedenfall geschrieben, aber ausgetauscht nicht (scheinbar).
      Auch mit getElementsByTagName scheint es nicht zu funktionieren. Wenn das jedoch funktioniert und ich auf dem Holzweg bin was den Fehler angeht weiß ich nicht wo er sonst liegt. Durch php wird auf jedenfall immer das map-Element vollständig übergeben, daher sehe ich keine andere Ursache als das der Austausch nicht funktioniert.

      Momentan hab ich schon innerHTML, replaceChild und firstChild.data ausprobiert, alles hat nicht funktioniert :( vielleicht sollte ichs mal mit der löschung jeglicher Kindelemente vom Div-Element versuchen. Ich kann mir ja auch die Kindelemente anzeigen lassen...

      Vielleicht hast du ja noch ne Idee, auf jedenfall schon mal Danke^^

    2. Ich hab jetzt eben nochmal versucht die Kindelemente von <div id="map"></div> herauszubekommen und da bin ich auf was komisches gestoßen. Script:
      alert(document.getElementById("map").childNodes.length);
      if(document.getElementById("map").childNodes.length > 0) {
      alert(document.getElementById("map").childNodes[0].nodeValue); }

      Als Antwort bekam ich "1" und "test". Also nur den Test den ich da als Test eingefügt hatte. Nachdem ich "test" rausgelöscht habe war es "0". Warum wird das map-Element nicht als Kindelement angesehen? Liegt da vielleicht das Problem?

      1. hi,

        alert(document.getElementById("map").childNodes.length);
        if(document.getElementById("map").childNodes.length > 0) {
        alert(document.getElementById("map").childNodes[0].nodeValue); }

        Als Antwort bekam ich "1" und "test". Also nur den Test den ich da als Test eingefügt hatte. Nachdem ich "test" rausgelöscht habe war es "0". Warum wird das map-Element nicht als Kindelement angesehen?

        Bist du sicher, dass du es auch da eingefügt hast, wo du glaubst?

        Ich denke, du solltest wirklich noch mal genauer mit dem DOM Inspector prüfen, ob du da auch wirklich das machst, was du zu tun glaubst ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Ich denke schon das ich es an die richtige Stelle schreibe. Aber vielleicht bist du ja so nett und kannst nochmal über mein Script schauen?

          alert(document.getElementsByName("map")[0].childNodes.length);
          if(document.getElementById("map").childNodes.length > 0) {
            alert(document.getElementById("map").childNodes[0].nodeValue);
          }
          if(state=0) {
            var map = document.createElement("map");
            map.innerHTML = http_request.responseText;
            document.getElementById("map").replaceChild(map,document.getElementsByTagName("map")[0]);
          }

          das ist der JavaScript Teil und der HTML Teil ist nur das hier:

          <div id="map"></div>

          1. shit, hab nen kleinen Fehler gemacht^^"
            Hab das ja zu Testzwecken etwas umgeändert.
            Das hier ist das richtige:

            alert(document.getElementById("map").childNodes.length);
            if(document.getElementById("map").childNodes.length > 0) {
              alert(document.getElementById("map").childNodes[0].nodeValue);
            }