Bastian: dynamischer Methodennamen bei DOM Zugriff

Hallo,

folgendes Problem:

Ich bekomme in einer Ajax Anwendung ein XML welches u.a. einen Eintrag dieser Art enthält:

<update item="Bild_Id" type="src" content="image.gif">

könnte aber auch etwas in der Art sein:

<update item="Div_id" type="innerHTML" content="blu bla selfhtml ist super">

Sinn ist, dass nach einen http request gewisse Elemente der Seite geupdatet werden sollen.

So z.B.:

updateitems = xmlDOC.getElementsByTagName('update');
for(i = 0; i < updateitems.length; i++)
{
     updateitem = xmlDOC.getElementsByTagName('update')[i];
     type = updateitem.attributes[1].nodeValue;             document.getElementById(updateitem.attributes[0].nodeValue).type=updateitem.attributes[2].nodeValue;
}

geht natürlich nicht. Es passiert einfach nichts. Zumindestens nicht so, dass man eine Meldung bekommen würde. Weder ein Abbruch der Methode (Sie wird normal ausgeführt), noch eine Warnung oder Fehler meldung in der FF Fehlerkonsole.

Die Frage ist hoffentlich verständlich, es geht darum, wie man einen Methodennamen einer Variablen entnimmt.

  1. Hallo Bastian!

    Prüfe doch mal, ob deine updateitems überhaupt existieren:

    updateitems = xmlDOC.getElementsByTagName('update');

    alert("Anzahl:"+updateitems.length);

    Es wird ein Wert>0 angezeigt?

    Dann wäre zu klären, wie .attributes[] in Javascript enthalten ist, oder ob es sich um MS Syntax handelt.

    Schließlich:

    »»updateitem = xmlDOC.getElementsByTagName('update')[i];
    Referenziere einen Knoten (z.B. <update item="Bild_Id"... />)

    »»type = updateitem.attributes[1].nodeValue;
    Enthält nun einen String (z.B. "src")

    »»document.getElementById(updateitem.attributes[0].nodeValue).type=updateitem.attributes[2].nodeValue;
    Das KANN nicht funktionieren, es bedeutet:
    Setze Bsp.: das Attribut type des Elements mit id="Bild_Id" auf "image.gif"
    Ein Beispielergebnis wäre: <img id="Bild_Id" type="image.gif" />

    Du willst eher:
    document.getElementById(updateitem.attributes[0].nodeValue).setAttribute(updateitem.attributes[1].nodeValue,updateitem.attributes[2].nodeValue);

    Grüsse,
    Richard

    1. Hallo Bastian!

      Hallo Richard!

      Prüfe doch mal, ob deine updateitems überhaupt existieren:

      updateitems = xmlDOC.getElementsByTagName('update');
      alert("Anzahl:"+updateitems.length);

      Es wird ein Wert>0 angezeigt?

      Klar, hatte ich schon gemacht.

      »»document.getElementById(updateitem.attributes[0].nodeValue).type=updateitem.attributes[2].nodeValue;

      Das KANN nicht funktionieren, es bedeutet:
      Setze Bsp.: das Attribut type des Elements mit id="Bild_Id" auf "image.gif"
      Ein Beispielergebnis wäre: <img id="Bild_Id" type="image.gif" />

      Ja, das war mir klar, aber ich wollte halt klar machen, was ich will. Bei php kann man ja z.B variable variablen namen mit $$var haben. Natürlich ist das nicht mit JS vergleichbar.

      Du willst eher:
      document.getElementById(updateitem.attributes[0].nodeValue).setAttribute(updateitem.attributes[1].nodeValue,updateitem.attributes[2].nodeValue);

      GENAU das habe ich gesucht. Vielen Dank! Es klappt hervorragend.

      Grüsse,
      Richard

      Gruß zurück,
      Bastian