Inhalte von Zellen anhand von id in <tr>-Tag auslesen
Michael
- javascript
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?
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
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
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
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
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
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
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
hi,
Und removeChild() entfernt vorher.
Oder replaceChild() ersetzt.
gruß,
wahsaga
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