tomtom: firstChild bei dynamischer Tabellenzeile

Hi,

ich habe folgendes Problem:

Ich habe in meiner HTML Datei eine Tabelle mit 2 Zeilen, nun füge ich dynamisch mit Javascript weitere Zeilen dazu. Funktioniert auch super.

Mein <tr>-Tag bekommt eine id zb "zeile[0]". Nun möchte ich mit

document.getElementById('zeile[0]').firstChild.innerHTML

auf den Inhalt des ersten <td>-Tags zugreifen. Funtkioniert auch, aber nur bei den Elementen die ich dynamisch hinzugefügt habe, bei meinen ersten 2 statischen Zeilen bekomme ich nur ein "undefined" zurück obwohl da das selbe drin steht wie bei meinen dynamischen Zeilen.

Wie komme ich an die Zelleninhalte meiner ersten beiden Zeilen ran?

Vom HTML Code her sehen alle Zeilen absolut identisch aus. Es kommen weder Fehler noch Warnungen.

Browser ist Firefox 1.5.0.3

Vielen Dank

  1. Hi,

    Vom HTML Code her sehen alle Zeilen absolut identisch aus. Es kommen weder Fehler noch Warnungen.

    sicher? Nur eine Vermutung, aber bei
    <tr>
       <td>...</td>
    </tr>
    ist das firstChild von tr eine CDATA-Section bestehend aus (angedeuted) Zeilenumbruch und Tab.

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
  2. Mein <tr>-Tag bekommt eine id zb "zeile[0]".

    IDs dürfen glaub ich nur Buchstaben und Zahlen enthalten, oder zumindest sollte man es so tun.

    document.getElementById('zeile[0]').firstChild.innerHTML

    innerHTML ist Teil des All-Objektes und nicht im DOM verfügbar. Es wird eigentlich nur vom IE unterstützt, aber manche Browser haben aus Kompatiblitätsgründen eine teilweise Implewmentierung des All-Objektes. Man sollte es aber nicht benutzen.
    Lies dir nochmal die Funktionen des node-Objektes durch und benutz besser die.

    1. hi,

      innerHTML ist Teil des All-Objektes und nicht im DOM verfügbar. Es wird eigentlich nur vom IE unterstützt, aber manche Browser haben aus Kompatiblitätsgründen eine teilweise Implewmentierung des All-Objektes.

      innerHTML haben auch Geckos und Opera inzwischen übernommen - unterhalb des Node-Objektes.
      Wie's bei Konqueror/Safari aussieht, weiß ich im Moment nicht.

      Man sollte es aber nicht benutzen.

      Klar kann man es verwenden - man sollte nur vorher abfragen, ob es auch existiert.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Das manche Browser es haben, hab ich ja gesagt. Und das mit dem "sollte man nicht verwenden" war auch so gemeint, dass man es vorher abfragt.

      2. Hallo wahsaga.

        innerHTML haben auch Geckos und Opera inzwischen übernommen - unterhalb des Node-Objektes.
        Wie's bei Konqueror/Safari aussieht, weiß ich im Moment nicht.

        Konqueror hat damit kein Problem, Safari kann ich gerade nicht testen.

        Einen schönen Donnerstag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Hallo Ashura,

          ... Safari kann ich gerade nicht testen.

          Safari unterstützt auch innerHTML. Ich hatte bei den DOM-fähigen Browsern bisher nur im MAC-IE Probleme mit innerHTML. Gelöst habe ich sie, indem ich den Knoten erst leere:

          e.innerHTML="";
          e.innerHTML=html_zeugs;

          Allerdings habe ich nur "einfache" Strukturen, wie <a>, <img>, <p> oder <br> über innerHTML gesetzt. Bei kompletten Tabellen soll es Probleme geben können, habe ich gelesen.

          Gruß, Jürgen

        2. Hallo,

          innerHTML haben auch Geckos und Opera inzwischen übernommen - unterhalb des Node-Objektes.
          Wie's bei Konqueror/Safari aussieht, weiß ich im Moment nicht.

          Konqueror hat damit kein Problem, Safari kann ich gerade nicht testen.

          Musst du auch nicht, wozu gibt es SELFHTML.

          Mathias

          1. Hallo molily.

            innerHTML haben auch Geckos und Opera inzwischen übernommen - unterhalb des Node-Objektes.
            Wie's bei Konqueror/Safari aussieht, weiß ich im Moment nicht.

            Konqueror hat damit kein Problem, Safari kann ich gerade nicht testen.

            Musst du auch nicht, wozu gibt es SELFHTML.

            Jaja, wer lesen kann ist klar im Vorteil.

            Einen schönen Donnerstag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
  3. Hi!

    Haben die statischen Zeilen auch eine ID? Läuft der Zähler für die ID richtig?

    Gruß

    Hans

  4. Hi,

    Rouven hat recht.

    Da bei den dynamischen Zeilen alles aneinander geklatsch wurde hat er es dort lesen können.

    Jetzt sind meine statischen Zeilen auch unsäuberlich und schon geht es.

    :-)

    Vielen Dank

    MFG

    tomtom

  5. Ich habe in meiner HTML Datei eine Tabelle mit 2 Zeilen, nun füge ich dynamisch mit Javascript weitere Zeilen dazu. Funktioniert auch super.

    Mein <tr>-Tag bekommt eine id zb "zeile[0]". Nun möchte ich mit

    document.getElementById('zeile[0]').firstChild.innerHTML

    auf den Inhalt des ersten <td>-Tags zugreifen. Funtkioniert auch, aber nur bei den Elementen die ich dynamisch hinzugefügt habe, bei meinen ersten 2 statischen Zeilen bekomme ich nur ein "undefined" zurück obwohl da das selbe drin steht wie bei meinen dynamischen Zeilen.

    einfacher, statt den unschönen Weg, den du jetzt gegangen bist, wäre z.b.

    document.getElementById('zeile[0]').getElementsByTagName('td')[0]

    Damit hast du auf jeden Fall zugriff auf das erste td element nach dem tr und das ist ja was du willst.

    Struppi.

    --
    Javascript ist toll (Perl auch!)