Wille: Text aus Tabellen auslesen

Hallo Leute,

ich hoffe, ich nerv Euch jetzt das letzte mal ...
also : ich habe eine Tabelle mit mehreren Zeilen und Spalten (z.B. "Name" und "Titel"). Wenn ich eine bestimmte Zeile auswähle (z.B. per onClick="..."), möchte ich die Daten aus den Spalten dieser Zeile in ein Textfeld übertragen. Jede Spalte besitzt ein individuelles "name"-Attribut, das jedoch in jeder Zeile gleich lautet. Dazu möchte ich (notgedrungen ;) JS verwenden.

Jetzt kommt mein Problem : wie habe ich (mittels JS) Zugriff auf den Text in jeder Tabellenzelle? Das

  • "this"-Attribut

liefert leider nur den Namen der Seite (warum auch immer), das
klassische

  • "document.tabellenname.zeilenname.spaltenname"

beglückt mich mit der  Fehlermeldung "... ist Null oder kein Objekt" und mit

  • "document.getElementsByName("Name")[0]"

weiß ich nicht, wie ich jetzt an den Text in der Zelle rankomme.

Hat da jemand Ahnung?

ciao, Wille

  1. Hi,

    • "this"-Attribut

    Objekt.

    liefert leider nur den Namen der Seite

    Wie wendest Du es an?

    das klassische

    • "document.tabellenname.zeilenname.spaltenname"

    Das ist nicht klassisch, sondern für einige wenige Spezialfälle definiert.

    • "document.getElementsByName("Name")[0]"
      weiß ich nicht, wie ich jetzt an den Text in der Zelle rankomme.

    Dies musst Du bei _jeder_ Art des Zugriffs wissen. Abstrahiere Dein Problem und suche danach in SelfHTML.

    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. Hi,

      • "this"-Attribut

      Objekt.

      liefert leider nur den Namen der Seite

      Wie wendest Du es an?

      --> Ich verwende für jede Tabellenzeile ein onClick-Event. Wird dieses ausgelöst, rufe ich eine JS-Funktion auf und übergebe ihr als (damit sie weiß, welche Zeile "ruft") das this-Attribut. Soweit die Theorie. Lasse ich mir aber spaßeshalber per "alert" die durch "this" übergebene Zeichenkette ausgeben, erhalte ich nur den Namen des Frames. Ich weiß zwar nicht, warum das nicht funktioniert (schließlich geht es bei Formularen auch ...), aber offensichtlich muß eine andere Lösung her ...

      das klassische

      • "document.tabellenname.zeilenname.spaltenname"

      Das ist nicht klassisch, sondern für einige wenige Spezialfälle definiert.

      --> Das wäre dann mein Ausweg gewesen. Alle oben genannten Objekte besitzen ein name-Tag und sollten somit ansprechbar sein. Lasse ich mir aber wieder mittels "alert" zum Test die Breite der Zelle ausgeben (also noch ".width" angehängt), scheitert dies ...

      • "document.getElementsByName("Name")[0]"
        weiß ich nicht, wie ich jetzt an den Text in der Zelle rankomme.

      Dies musst Du bei _jeder_ Art des Zugriffs wissen. Abstrahiere Dein Problem und suche danach in SelfHTML.

      --> Genau da liegt aber mein Problem. Trotz intensiver Suche habe ich in selfHTML keinen Hinweis gefunden, wie ich den Text "ansprechen" kann. Ein value-Attribut wie bei Formularen existiert nicht, ein (offenbar undokumentierten) item-Attribut stellt mich vor Rätsel, eine "toString"-Anweisung führt nicht zum Erfolg und das Objekt "table" weist (laut selfHTML) keine entsprechenden Attribute aus.

      Was kann ich tun ???

      Cheatah

      1. Hi,

        --> Ich verwende für jede Tabellenzeile ein onClick-Event. Wird dieses ausgelöst, rufe ich eine JS-Funktion auf und übergebe ihr als (damit sie weiß, welche Zeile "ruft") das this-Attribut.

        damit is 'this' exakt das, was Du mit document.getElementsByName("Name")[0] erhälst.

        Soweit die Theorie. Lasse ich mir aber spaßeshalber per "alert" die durch "this" übergebene Zeichenkette ausgeben, erhalte ich nur den Namen des Frames.

        In welchem Browser? Abgesehen davon: Was soll bei einem komplexen Objekt wie einer DOM-Node denn ausgegeben werden? Irgendeine String-Repräsentation muss sich der Browser suchen. Ob das nun etwas der Art "[Object]" oder irgendein Name ist, ist gehupft wie gesprungen.

        Ich weiß zwar nicht, warum das nicht funktioniert

        Wieso meinst Du, dass es nicht funktioniert?

        Alle oben genannten Objekte besitzen ein name-Tag und sollten somit ansprechbar sein.

        Ja, über DOM.

        Lasse ich mir aber wieder mittels "alert" zum Test die Breite der Zelle ausgeben (also noch ".width" angehängt), scheitert dies ...

        Wie ich bereits sagte: Verkürzte Schnittstellen zu bestimmten Daten sind nur für wenige Objekttypen definiert.

        Trotz intensiver Suche habe ich in selfHTML keinen Hinweis gefunden, wie ich den Text "ansprechen" kann.

        Auch das sagte ich bereits: Abstrahiere Dein Problem. Konzentriere Dich nicht darauf, dass Du einen Text suchst - es könnte genauso gut "<img ...>" drin stehen. Du hast ein DOM-Objekt vorliegen, beschäftige Dich also mit DOM-Methoden.

        Ein value-Attribut wie bei Formularen existiert nicht,

        In der Tat.

        ein (offenbar undokumentierten) item-Attribut stellt mich vor Rätsel,

        Welches item-Attribut, warum undokumnentiert?

        eine "toString"-Anweisung führt nicht zum Erfolg

        Raten hilft nicht.

        und das Objekt "table" weist (laut selfHTML) keine entsprechenden Attribute aus.

        Richtig.

        Was kann ich tun ???

        Dich mit DOM beschäftigen.

        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. Hi Cheatah,

          ok, also DOM.

          Ich will Dir noch nochmal schnell meine Intention erläutern, nur im sicher zu gehen, daß wir nicht aneinander vorbei reden.

          Ich habe also eine Tabelle mit mehreren Spalten. Diese sollen später aus einer Datenbank befüllt werden. Um diese Daten dann wieder aus einer speziellen Tabellenzeile auszulesen, brauche ich eine recht allgemein gültige Funktion, der ich quasi die "Identifikation" der betreffenden Zelle übergeben kann - schließlich ist es furchtbar unpraktikabel, für jede Tabellenzelle eine individuelle Funktion zu erstellen ... mal ganz davon abgesehen, daß die Anzahl der Datensätze einer Datenbank selten festgelegt ist.
          Das this-Attribut soll nun diese "Identifikation" liefern. Gibt die alert-Funktion ein "[Object]" aus, bin ich guter Dinge, daß das "this" die richtig Identifikation bietet. Da allerdings nur der Name des Frames ausgegeben wird, kann ich damit nicht die jeweilige Tabellenzelle identifizieren.

          Wo finde ich nun genau diese DOM-Informationen im selfHTML? Damit läßt sich der Zelleninhalt auslesen?

          Apropos : dieses angesprochene item-Attribut erhalte ich, wenn ich (nicht lachen ...) in Frontpage das Ziel eingebe. Schließt man dort ein "Element" mit einem Punkt ab (zB "document."), erscheinen alle verfügbaren Attribute der nächsten Hirarchiestufe. Dort erhalte ich dann nach "get Elem ..." das "item". Allerdings habe ich dazu nix in selfHTML gefunden (daher "undokumentiert" ...)

          Schon mal vorab besten Dank!
          ciao, Wille

          1. Hi,

            Ich will Dir noch nochmal schnell meine Intention erläutern, nur im sicher zu gehen, daß wir nicht aneinander vorbei reden.

            das ist insofern weise, als ich jetzt weiß, dass ich Dir nichts Falsches erzählt habe ;-)

            Das this-Attribut

            Das this-Objekt. Oder die this-Referenz, das trifft es eigentlich besser. Es ist eine Referenz auf ein DOM-Objekt.

            soll nun diese "Identifikation" liefern.

            Exakt der richtige Ansatz.

            Da allerdings nur der Name des Frames ausgegeben wird,

            In welchem Browser?

            kann ich damit nicht die jeweilige Tabellenzelle identifizieren.

            Was _ausgegeben_ wird, ist für die Nutzung irrelevant.

            Wo finde ich nun genau diese DOM-Informationen im selfHTML?

            DOM ist eines der drei DHTML-Modelle.

            Dort erhalte ich dann nach "get Elem ..." das "item".

            Frontpage ist ja schlauer, als ich dachte. DOM definiert seine listenartigen Objekte nicht als Array, sondern als Collection, dessen einzelne Items sich über eine item()-Methode ansprechen lassen. Die meisten Implementationen erlauben zusätzlich(!) einen Array-typischen Zugriff, z.B. über eckige Klammern.

            Allerdings habe ich dazu nix in selfHTML gefunden (daher "undokumentiert" ...)

            SelfHTML ist Zweitliteratur, keine Dokumentation. Die gibt es _nur_ bei http://www.w3.org/DOM/.

            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. Hi Cheatah,

              die Ausgabe des Framenamens durch "this" ereilt mich im IE6. Ich wollte damit auch nix weiter erreichen ... sollte lediglich überprüfen, ob die eindeutige Identifikation der gerade relevanten Tabellenzelle funktioniert. Weiter nix.

              Ich hatte auch selfHTML nicht als wirkliche "Dokumentation" erachtet - allerdings steht da ja nun einiges drin und ich dachte, es erhebt Anspruch auf Vollständigkeit. Da ich aber dort nix vom wegen item und table gefunden habe, bin ich davon ausgegangen, es wäre vielleicht ein kleines "schmankerl" ...

              Wie auch immer, ich werde mein Glück versuchen.
              Besten Dank ...