Nudnik: (Textdatei)daten einbinden

Hallo zusammen,

ich hab ein (hoffentlich nur kleines) Problem.

ich hab eine htm file gemacht, die auch wunderbar die Textdatei einliest und anzeigt. Auch der Filter funzt.

Jetzt müsste ich nur jeder der dynamisch angezeigten Tabellenzeilen eine bestimmte id verpassen...

Hintergrund ist folgender. Das soll eine Ersatzteilliste werden, weiter oben im Dokument sind Bilder, wenn der user eines der map-bereiche anklickt, will ich per a href zu der betreffenden Zeile in der dynamischen Tabelle springen und diese farbig hinterlegen, damit die Zeile auch sofort eindeutig erkennbar ist.

Am besten wäre es, wenn die Zeile den Wert als id bekommt, der in der 2. Spalte (Sachnummer) steht, das wäre gut zu handhaben.

Ein nächster Punkt wird dann werden, dass bestimmte Teile dieser Liste durch neue Teile ersetzt wurden/werden. Diese (nicht mehr lieferbaren) sind dadurch erkennbar, dss in einer bestimmten Spalte (replaced) die Sachnummer des neuen Teils steht. Diese Zeilen sollen dann roten Font haben.

Ich hoffe, ich habe mich verständlich ausgedrückt.

Mit bestem Dank im Vorraus

Nudnik

  1. Moin

    Ich hoffe, ich habe mich verständlich ausgedrückt.

    nicht wirklich!
    Aus deiner Beschreibung erschließt sich mir weder die bisherige Daten- und Dokumentenstruktur noch dein Problem damit.

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
  2. ich hab eine htm file gemacht, die auch wunderbar die Textdatei einliest und anzeigt. Auch der Filter funzt.

    Klingt nach dem TDC. Aber ehe ich hier tiefer einsteige, lege ich dir erst mal meine bisherigen Postings zu TDC ans Herz, eventuell findest du dort schon einen Lösungshinweis.

    Ansonsten zeig mal ein Onlinebeispiel.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
  3. ja, es dreht sich um TDC

    die Ersatzteilliste soll am Ende in nen HTMLHelp file.

    Beispiel: www.kalleh.de/HTMLHelp/RM63369.htm

    Im moment springen die links der map-bereiche zu ner anderen Tabelle, die ich aber ned hochgeladen hab...

    ich hätte gern, dass wenn man auf eines der map bereiche klickt, zu der Tabllenzeile gesprugen wird, wo das Ersatzteil steht und daß diese Zeile farbig hinterlegt wird.

    vielen Dank

    1. ja, es dreht sich um TDC

      Gut, dann sage das bitte vorher :)

      Beispiel: www.kalleh.de/HTMLHelp/RM63369.htm
      ich hätte gern, dass wenn man auf eines der map bereiche klickt, zu der Tabllenzeile gesprugen wird, wo das Ersatzteil steht und daß diese Zeile farbig hinterlegt wird.

      Du benötigst dafür Anker, die du nach erfolgtem Laden des Dokumentes erzeugen müsstest, z.B. indem du dir tabellenweise alle Zeilen holst und jeder eine eindeutige ID zuweist. Für das Einfärben der Zeile fällt mir allerdings kein geeignetes Event ein.

      Siechfred

      --
      Ich bin strenggenommen auch nur interessierter Laie. (molily)
      1. Du benötigst dafür Anker, die du nach erfolgtem Laden des Dokumentes erzeugen müsstest, z.B. indem du dir tabellenweise alle Zeilen holst und jeder eine eindeutige ID zuweist.

        Ich habe da mal ein Beispiel hochgeladen:
        http://test.anaboe.net/_test0.html (Variante 1)
        http://test.anaboe.net/_test1.html (Variante 2)

        Für das Entfärben der Tabellenzeilen darfst du dir jetzt selber was einfallen lassen :)

        Siechfred

        PS: Das geht bestimmt auch schöner, eleganter und was weiß ich, ist eben nur eine Demonstration.

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        1. Ich habe da mal ein Beispiel hochgeladen:

          Und hier der kommentierte relevante JS-Code:

          // Funktion, die aufgerufen wird, wenn onclick  
          // bei den dynamisch erzeugten internen Links feuert  
          function colorTR(loc) {  
            var currentRow = document.getElementById(loc);  
            currentRow.style.backgroundColor = 'red';  
          }  
            
          // diese Funktion erzeugt für jede Zeile jeder Tabelle einen Link  
          function AddLink(tab, row, str) {  
            var liElm = document.createElement('li');  
            var lnkElm = document.createElement('a');  
            lnkElm.href = '#'+str;  
            lnkElm.onclick = function() { colorTR(str); }  
            tab++;  
            row++;  
            var lnkText = document.createTextNode('Tabelle '+tab+', Zeile'+row);  
            lnkElm.appendChild(lnkText);  
            liElm.appendChild(lnkElm);  
            document.getElementById('Linkliste').appendChild(liElm);  
          }  
            
          // diese Funktion wird onload angestoßen  
          function AddID() {  
            // alle Tabellen holen und durchlaufen  
            var tableColl = document.getElementsByTagName('table');  
            for(i = 0; i<tableColl.length; i++) {  
              // alle Zeilen der aktuellen Tabelle holen und einzeln durchlaufen  
              var trColl = tableColl[i].getElementsByTagName('tr');  
              for(j = 0; j<trColl.length; j++) {  
                var idText = 't'+i+'_z'+j;  
                // ID definieren  
                trColl[j].id = idText;  
                // Link erzeugen  
                AddLink(i, j, idText);  
              }  
            }  
          }
          

          Siechfred

          --
          Ich bin strenggenommen auch nur interessierter Laie. (molily)
          1. wow, super, dein Beispiel macht genau was ich brauch (:

            so wie ich das bis jetzt les' komm ich mit getElementsbyTagName('td') an die einzelnen Zellen...
            wie komm ich an eventuellen Text in der Zelle

            1. so wie ich das bis jetzt les' komm ich mit getElementsbyTagName('td') an die einzelnen Zellen...

              Über das node-Objekt. IE-only wäre innerText resp. innerHTML (wenngleich viele andere Browser das auch verstehen, aber eben nicht alle Nicht-IEs).

              Siechfred

              --
              Ich bin strenggenommen auch nur interessierter Laie. (molily)
              1. Hallo,

                ich versuche nun schon das halbe WE und heute morgen deinen Script umzuschreiben...
                ich kriegs aber leider ned ans laufen.

                hab schon einige Versuche mit data, firstChild und nextSibling hinter mir, aber mehr als 'undefined' krieg ich ned zu sehen.

                mein aktueller Stand ist da: http://www.kalleh.de/HTMLHelp/RM63369_f.htm

                ich bräuchte den Text aus der zweiten Spalte (tdColl[1].data?!?) als ID

                1. hab schon einige Versuche mit data, firstChild und nextSibling hinter mir, aber mehr als 'undefined' krieg ich ned zu sehen.

                  Du versuchst, das erste Kind (firstChild) einer Kollektion (tdColl) zu ermitteln, das kann nicht gehen. Notiere eine Indexnummer, z.B. tdColl[0].firstChild für die erste Tabellenzelle der Tabellenzeile.

                  ich bräuchte den Text aus der zweiten Spalte (tdColl[1].data?!?) als ID

                  tdColl[1].firstChild.data

                  Siechfred

                  --
                  Ich bin strenggenommen auch nur interessierter Laie. (molily)
                  1. tdColl[1].firstChild.data

                    var idText = tdColl[1].firstChild.data;
                    alert ( idText );

                    so krieg ich auch undefined  ):

                    Bsp:
                    http://www.kalleh.de/HTMLHelp/RM63369_f.htm

                    1. var idText = tdColl[1].firstChild.data;
                      alert ( idText );
                      so krieg ich auch undefined  ):

                      Die Struktur der Zellen deiner Anzeigentabelle ist folgende (sorry, habe ich erst jetzt gesehen):

                      <!-- Das ist tdColl[n] -->  
                      <td>  
                        <!-- das ist firstChild von tdColl[n] -->  
                        <span datafld="feldname">  
                          <!-- das ist firstChild von firstChild von tdColl[n], der gesuchte Text -->  
                          Etwas Text  
                        </span>  
                      </td>
                      

                      Dein firstChild ist also kein Textknoten, sondern ein Elementknoten (SPAN); node.data liefert aber keine Elementinformationen, sondern ausschließlich Textdaten und deshalb 'undefined'. Der von dir gesuchte Text ist ein Kindknoten deines SPAN-Elementes, dieses wiederum ist Kindknoten des TD-Elementes. Das zusammengefügt ergibt:

                      var idText = tdColl[1].firstChild.firstChild.data;

                      Alles klar?

                      Siechfred

                      --
                      Ich bin strenggenommen auch nur interessierter Laie. (molily)
                      1. var idText = tdColl[1].firstChild.firstChild.data;

                        Kleiner Nachtrag:
                        Es wäre einfacher, nicht nach allen TD-Elementen zu suchen, sondern gleich nach allen SPAN-Elementen in der aktuellen Tabellenzeile:

                        function AddID() {  
                          var tab = document.getElementById('Anzeigetabelle');  
                          var trColl = tab.getElementsByTagName('tr');  
                          for(j = 0; j<trColl.length; j++) {  
                            var tdColl = trColl[j].getElementsByTagName('span');  
                            var idText = tdColl[1].firstChild.data;  
                            //ID definieren  
                            trColl[j].id = idText;  
                          }  
                        }
                        

                        Siechfred

                        --
                        Ich bin strenggenommen auch nur interessierter Laie. (molily)
                      2. Alles klar?

                        Ich glaub, ich versteh soweit schon was du meinst, aber nun krieg ich ein Object erforderlich, egal ob

                        var tdColl = trColl[j].getElementsByTagName('span');
                        var idText = tdColl[1].firstChild.data;

                        dasselbe dann bei
                        var tdColl = trColl[j].getElementsByTagName('td');
                        var idText = tdColl[1].firstChild.firstChild.data;

                        wäre innerHTML ned sogar praktischer? das gäbe auch formatierten Text her?

                        Ich glaub ich habs weiter oben schon mal erwähnt, die ganze Seite wirds dann mit verschiedenen Bildern (und Filtern der Teile Tabelle) 5 mal in einem HTMLHelp-file geben... Insofern kann dann nur der IE der browser sein

                        1. Ich glaub, ich versteh soweit schon was du meinst, aber nun krieg ich ein Object erforderlich,

                          Seltsan, mein IE6 hat das ohne zu meckern durchgezogen.

                          Ich glaub ich habs weiter oben schon mal erwähnt, die ganze Seite wirds dann mit verschiedenen Bildern (und Filtern der Teile Tabelle) 5 mal in einem HTMLHelp-file geben... Insofern kann dann nur der IE der browser sein

                          Dann versuche es in der Tat über getElementsByTagName('span')[1].innerText.

                          Siechfred

                          --
                          Ich bin strenggenommen auch nur interessierter Laie. (molily)
                          1. Jetzt hab ich Kopfweh !!! (:

                            Schau dir mal das an: www.kalleh.de/HTMLHelp/RM6369_3.htm

                            klick das hallo welt weg und springt zu den Ersatzteilen...

                            lad dir die seite runter und mach das alert mal raus...

                            Woran liegt das? mit alert gehts und ohne ned ?!?

                            1. Woran liegt das? mit alert gehts und ohne ned ?!?

                              Möglicherweise ist das Laden der Tabelle noch nicht abgeschlossen und es genügt die Winzigkeit eines alert-Fensters, um dem IE die Zeit zu geben, die Daten fertig zu laden. Versuche mal, statt des alert einen kleinen Timeout einzubauen. Ansonsten wäre eine Idee, dem object-Tag einen entsprechenden Eventhandler zu verpassen, ondatasetcomplete klingt gut.

                              Siechfred

                              --
                              Ich bin strenggenommen auch nur interessierter Laie. (molily)
                              1. ondatasetcomplete klingt gut.

                                zu ondatasetcomplete hab ich nix gefunden, aber bei body onload suchen lassen und dort am Ende
                                window.setTimeout("AddID()", 2500);
                                funzt!!!

                                supergeil, vielen Dank für die Hilfe

                                1. zu ondatasetcomplete hab ich nix gefunden

                                  http://msdn.microsoft.com/workshop/author/dhtml/reference/events/ondatasetcomplete.asp

                                  window.setTimeout("AddID()", 2500);
                                  funzt!!!

                                  Freut mich :)

                                  Siechfred

                                  --
                                  Ich bin strenggenommen auch nur interessierter Laie. (molily)
          2. kann ich auch nur eine bestimmte Tabelle mit addID bearbeiten, nämlich meine 'Anzeigetabelle'?

            1. kann ich auch nur eine bestimmte Tabelle mit addID bearbeiten, nämlich meine 'Anzeigetabelle'?

              Klar, hole dir nur für diese Tabelle die Zeilen, entweder über ihren Index (0 für die 1. Tabelle, 1 für die 2. usw.) oder via getElementById.

              Siechfred

              --
              Ich bin strenggenommen auch nur interessierter Laie. (molily)