(Textdatei)daten einbinden
Nudnik
- javascript
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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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 ?!?
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
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
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
kann ich auch nur eine bestimmte Tabelle mit addID bearbeiten, nämlich meine 'Anzeigetabelle'?
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