Volker Nebelung: "Schreibmaschinenfunktion"

Aloha 'oe,

Ich arbeite gerade an einer kleinen Javascriptspielerei, die mich allerdings vor Probleme stellt:
Ich will aus einer Tabelle jeglichen Text einlesen, löschen und ihn anschließend im Schreibaschinenstil wieder ausgeben, d.h. die Buchstaben sollen einer nach dem anderen in den entsprechenden DOM-Knoten geschrieben werden.

Das Einlesen und Löschen der Inhalte der Textknoten funktioniert auch ohne Probleme.
Als Ergebnis erhalte ich ein Array textknoten[] , indem diese Inhalte gespeichert sind.
Nun soll hier testweise der Inhalt von textknoten[0] in das erste td-Element wie erläutert geschrieben werden:

  
schreibe(document.getElementsByTagName("td")[0]);  
function schreibe(knoten) {  
  var buchstabe = document.createTextNode((textknoten[0]).substr(0,1));  
  textknoten[0] = textknoten[0].substr(1, textknoten[0].length - 1);  
  knoten.firstChild.appendData(buchstabe.nodeValue);  
  if (textknoten[0] != "") {  
    window.setTimeout("schreibe(" + knoten + ")", 500); //*Fehlermeldung  
  }  
}  

Der erste Buchstabe wird korrekt geschrieben, allerdings tritt beim erneuten Aufruf von schreibe(...) folgende Fehlermeldung auf:
Fehler: missing ] after element list
Zeile: *Fehlermeldung
Quelltext:
schreibe([object HTMLTableCellElement])

1. Was hat die Fehlerkonsole da zu meckern?
2. Wie behebe ich den Fehler?

Danke im Voraus.

Gruß, Volker

--
„I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
- Tony Hoare
  1. Hi,

    window.setTimeout("schreibe(" + knoten + ")", 500); //*Fehlermeldung

    
    >   
    > Quelltext:  
    > schreibe([object HTMLTableCellElement])  
    >   
    > 1. Was hat die Fehlerkonsole da zu meckern?  
      
    dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.  
      
    
    > 2. Wie behebe ich den Fehler?  
      
    Das Stichwort lautet Closure.  
      
    Cheatah  
    
    -- 
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
    X-Will-Answer-Email: No  
    X-Please-Search-Archive-First: Absolutely Yes
    
    1. Das Stichwort lautet Closure.

      Ah, ein
      window.setTimeout(function(){ schreibe(knoten);}, 500);
      löst das Problem, danke.

      Allerdings hab ich noch meine Verständnisschwierigkeiten:

      dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.

      Warum hat das keinen Sinn? Ich nehme die Variable "knoten", und übergebe sie dem Aufruf derselben Funktion erneut als Parameter.
      Naiv überlegt würde ich sagen, dass dieser erneute Aufruf doch vor Beendigung des aktuellen Durchlaufs der Funktion schreibe(knoten) erfolgt ist, und daher müsste doch auch die Variable "knoten" verfügbar sein.
      Warum ist dem nicht so?

      Gruß, Volker

      --
      „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
      - Tony Hoare
      1. Hi,

        dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.
        Warum hat das keinen Sinn? Ich nehme die Variable "knoten", und übergebe sie dem Aufruf derselben Funktion erneut als Parameter.

        nein, in diesem Aufruf ist von der Variable "knoten" nicht die Rede. Er lautet:

        schreibe([object HTMLTableCellElement])

        Das ist exakt das, was auszuführen versucht wird. Also die Funktion "schreibe", die als Parameter den JavaScript-Code(!) "[object HTMLTableCellElement]" übergeben bekommt.

        Warum ist dem nicht so?

        Weil Du eine String-Verknüpfung von "schreibe(", der String-Repräsentation eines DOM-Objektes, sowie ")" gewählt hast.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Lieber Volker,

    Ich will aus einer Tabelle jeglichen Text einlesen, löschen und ihn anschließend im Schreibaschinenstil wieder ausgeben, d.h. die Buchstaben sollen einer nach dem anderen in den entsprechenden DOM-Knoten geschrieben werden.

    ich habe da etwas ähnliches bereits gemacht. Vielleicht ist das ja etwas für Dich?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)