Liebe alle - einmal mehr bin ich als DOM-Dummie auf Euer versammeltes Fachwissen angewiesen. Das Problem ist folgendes: Mein Skript, das ein in DHTML gehaltenes Sudoku (URL s.o.) antreibt, ist unschön, weil es nach jeder Zifferneingabe oder Mausklick über
document.getElementById("Id").innerHTML=var;
das gesamte innerHTML neu aufbaut. Das funktioniert zwar, ist aber unelegant und ineffizient. Also möchte ich neu nur noch die Elemente neu aufbauen, die im Fall einer Zifferneingabe auch wirklich geändert werden. Die Eingabefunktion (die auch die Art der Eingabe - Ziffer, Buchstabe, "" - prüft) sieht so aus:
function enter(b)
{
a=document.forms[0].elements[b].value;
if (a>0&&a<10)
{
td[b]="<input type="text" autocomplete="off" id="form"+color[0]+"" size="1" maxLength="1" value=""+a+"" onkeyup="javascript:enter("+b+");">";
num[b]=a;
message="Number entered.";
}
else if (a=="")
{
td[b]="<input type="text" autocomplete="off" id="form"+color[0]+"" size="1" maxLength="1" value="" onkeyup="javascript:enter("+b+");">";
num[b]=a;
message="Number cleared.";
}
else
{
td[b]="<input type="text" autocomplete="off" id="form"+color[0]+"" size="1" maxLength="1" value="" onkeyup="javascript:enter("+b+");">";
num[b]="";
message="Only numbers 1-9 allowed!";
}
document.getElementsByTagName("td")[b].firstChild.data=td[b];
document.getElementById("msg").firstChild.data=message;
}
(Nur zum Verständnis - td ist der Array mit den Tabellenzelleninhalten, num der Array mit den Zahlenwerten.)
Alles funktioniert bestens,
document.getElementById("msg").firstChild.data=message;
erneuert mir auch zuverlässig die Statuszeile unterhalb des Spiels. Nur
document.getElementsByTagName("td")[b].firstChild.data=td[b];
tut nicht, was es sollte - die Tabellenzelle mit der Indexnummer b wird nicht neu aufgebaut, obwohl die Variable b sauber übergeben wird. Was mach' ich falsch?
Herzlich, Thomas