Hi!
wie Du schon bemerkt hast, ist der Zugriff auf Tabellenfelder über firstChild kritisch, da die Zeilenumbrüche zwischen den Tags in einigen Browsern auch Knoten sind. Ich benutze daher:
Ja, das ist blöd, auch zählen IE und Mozilla nicht gleich:
<html>
<head>
<script type="text/javascript">
<!--
function sethover(id) {
for(j=1;document.getElementById(id).childNodes[j];j+=2) {
document.getElementById(id).childNodes[j].firstChild.style.background='#808080'
}
}
function setnormal(id) {
for(j=1;document.getElementById(id).childNodes[j];j+=2) {
document.getElementById(id).childNodes[j].firstChild.style.background='#FFFFFF'
}
}
//-->
</script>
</head>
<body>
<form>
<table>
<tr id="tr0" onmouseover="sethover('tr0');" onmouseout="setnormal('tr0');">
<td><input type="text" name="data[1][1]"></td>
<td><input type="text" name="data[1][2]"></td>
<td><input type="text" name="data[1][3]"></td>
</tr>
<tr id="tr1" onmouseover="sethover('tr1');" onmouseout="setnormal('tr1');">
<td><input type="text" name="data[2][1]"></td>
<td><input type="text" name="data[2][2]"></td>
<td><input type="text" name="data[2][3]"></td>
</tr>
<tr id="tr2" onmouseover="sethover('tr2');" onmouseout="setnormal('tr2');">
<td><input type="text" name="data[3][1]"></td>
<td><input type="text" name="data[3][2]"></td>
<td><input type="text" name="data[3][3]"></td>
</tr>
</table>
</form>
</body>
</html>
Das funktioniert so wie ich es will, aber wieder nur im Mozilla.
Wenn ich statt:
for(j=1;document.getElementById(id).childNodes[j];j+=2) {
sowas mache:
for(j=0;document.getElementById(id).childNodes[j];j+=1) {
dann geht es im IE, aber nicht mehr im Mozilla.
Gut, da könnte man jetzt eine Browserweiche bauen, aber ich finde es nicht so sauber. Nicht jede Zelle enthält ein Input-Feld, das kommt noch erschwerend hinzu. In jedem Fall würde ich noch <tr> in den Funktionen komplett einfärben, aber wie kann ich am sichersten, sowohl in IE5 als auch Mozilla, zusätzlich noch alle <input type="text"> einfärben?
var tab=document.getElementById("ID_der_Tabelle");
var tbdy=tab.getElementsByTagName("tbody")[0];
braucht man tbody?
var zeile=tbdy.getElementsByTagName("tr")[z].getElementsByTagName("td");
zeile[s].innerHTML="irgendwas"; oder zeile[s].firstChild.nodeValue="irgendwas";
zeile[s].style.color="irgendeineFarbe";
Hm, aber ich habe ja eine variable Anzahl an Input-Feldern, eine typische Zeile sieht so aus:
<tr id="tr3">
<td>123</td>
<td><input id="td31" type="text" name="data[3][1]"></td>
<td><input id="td32" type="text" name="data[3][2]"></td>
<td><input id="td33" type="text" name="data[3][3]"></td>
<td><input id="td34" type="text" name="data[3][4]"></td>
<td>&nbrs;</td>
<td>&nbrs;</td>
</tr>
In einer Tabelle sieht jede Zeile gleich aus. Das heißt sie haben gleich viele Felder, und die Input-Felder an den selben Positionen.
Das ganze wird wie gesagt dynamisch generiert, beim nöchsten mal können es z.B. 10 Input-Felder und nur 2 "normale" Felder sein.
Ich könnte also auch die Javascript-Funktion dynamisch generieren, oder sowas:
z.B. ein Aufruf per
onmouseover="sethover('3','4')"
function sethover(zeile,anzahl) {
for(i=1;i<=4;i++) {
feld = 'td' + zeile + i;
document.Formular.feld.style.background = '#000000';
}
}
Sowas in der Art, aber "schön" ist das auch nicht, wenn das überhaupt geht... ;-)
Viele Grüße
Andreas