Michael: Inhalte von Zellen anhand von id in <tr>-Tag auslesen

Ich versuche Tabellenreihen per onclick() anhand der id anzusprechen
und dann die Inhalte der einzelnen Tabellenzellen auszulesen:

  
<script type="text/javascript">  
<!--  
function test(id)  
{  
 var td = document.getElementById(id).firstChild;  
 while (td != null)  
       {  
        alert(td.firstChild.data);  
        td = td.nextSibling;  
       }  
}  
//-->  
</script>  
  
<table>  
 <tr onclick="test(this.id);" id="entry5">  
    <td>test</td>  
    <td>Dingsbums</td>  
    <td>5,40</td>  
    <td></td>  
    <td></td>  
 </tr>  
 <tr onclick="test(this.id);" id="entry8">  
    <td>test</td>  
    <td>irgendwas</td>  
    <td></td>  
    <td>18,20</td>  
    <td></td>  
    <td></td>  
 </tr>  
</table>

Im Internet Explorer läuft das Script einwandfrei,
Firefox weigert sich aber beharrlich mit
[i]Fehler: td.firstChild has no properties[/i]

Wo liegt mein Fehler?

  1. Hallo Michael.

    Ich versuche Tabellenreihen per onclick() anhand der id anzusprechen
    und dann die Inhalte der einzelnen Tabellenzellen auszulesen:

    [code lang=html]
    <script type="text/javascript">
    <!--
    function test(id)
    {
    var td = document.getElementById(id).firstChild;
    while (td != null)
           {
            alert(td.firstChild.data);
            td = td.nextSibling;
           }
    }
    //-->
    </script>

    <table>
    <tr onclick="test(this.id);" id="entry5">

    Warum übergibst du hier den Wert der id-Eigenschaft, anstatt einfach die Referenz auf die Tabellenzeile? Bei letzterem müsstest du deiner Funktion test() lediglich this übergeben, hättest damit eine Referenz auf die Zeile und könntest damit flexibler agieren.

    Im Internet Explorer läuft das Script einwandfrei,
    Firefox weigert sich aber beharrlich mit
    [i]Fehler: td.firstChild has no properties[/i]

    Wo liegt mein Fehler?

    Lasse dir einmal td.firstChild.nodeType ausgeben. Du wirst erkennen, dass du es hier nicht mit einem Elementknoten, sondern mit einem Textknoten zu tun hast, um genau zu sein: „\n    “.

    Würdest du die http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#tr@title=cells-Eigenschaft nutzen, müsstest du dir darüber keine Gedanken machen.

    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,

      Würdest du die http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#tr@title=cells-Eigenschaft nutzen, müsstest du dir darüber keine Gedanken machen.

      ja, ja, ich lerne es noch. :)
      Komme ich denn an den Inhalt der Zellen wie bei den getElement-Methoden auch über firstChild.data?

      Gruß, Jürgen

      1. Hallo JürgenB.

        Komme ich denn an den Inhalt der Zellen wie bei den getElement-Methoden auch über firstChild.data?

        Jawohl.

        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]
  2. Hallo Michael,

    firstChild ist schwierig, da in einigen Browsern der Zeilenumbruch zwischen <tr> und <td> ein Textknoten ist. Benutze lieber document.getElementById(id).getElementsByTagName("td")[nr]. Übrigens, wenn  du der Funktion nicht die id sondern die Referenz direkt übergibst, also statt test(this.id) nur test(this), reicht in der Funktion auch id.getElementsByTagName("td")[nr].

    Gruß, Jürgen

  3. Hallo Michael,

    [i]Fehler: td.firstChild has no properties[/i]

    Wo liegt mein Fehler?

    Du vergisst, das bereits der Umbruch im Quellcode von Firefox als Textnode betrachtet wird, was ja auch richtig ist.

    Gruß Gernot

    1. Du vergisst, das bereits der Umbruch im Quellcode von Firefox als
      Textnode betrachtet wird, was ja auch richtig ist.

      Das wusste ich nicht, danke.

      Vielleicht noch eine Frage im Anschluss:
      ich möchte jetzt aus einem
      <td>dingsbums</td>
      ein
      <td><input type="text" name="bla" value="dingsbums"></td>

      Wie gehe ich da am dümmsten vor?
      Ich vermute mit createElement() und createAttribute(),
      aber wie kriege ich dann den Original-Inhalt überschrieben?
      appendChild hängt ja nur an, oder?

      Michael

      1. hi,

        Ich vermute mit createElement() und createAttribute(),
        aber wie kriege ich dann den Original-Inhalt überschrieben?
        appendChild hängt ja nur an, oder?

        Und removeChild() entfernt vorher.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hi,

          Und removeChild() entfernt vorher.

          Oder replaceChild() ersetzt.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo Michael.

        <td><input type="text" name="bla" value="dingsbums"></td>

        Wie gehe ich da am dümmsten vor?
        Ich vermute mit createElement() und createAttribute(),

        Ersteres ist richtig, zweiters unnötig und im IE nicht einmal erfolgreich; du kannst dem per createElement neu erzeugten input-Element die jeweiligen Werte für seine Eigenschaften *direkt* zuweisen.

        aber wie kriege ich dann den Original-Inhalt überschrieben?
        appendChild hängt ja nur an, oder?

        Siehe wahsaga.

        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]