einfache funktion, wieso funktioniert sie aber nicht?
Sena
- javascript
Folgende funktion soll ermitteln wieviele tabellen eine html seite enthält, und die anzahl auf dem Bildschirm ausgeben. Es wird aber undefined ausgegeben. was ist falsch an der funktion?
danke!
Sena
<!--
function anzahltabellen() {
var k = 0;
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1; return k;}}
}
anztab = anzahltabellen();
document.write(anztab);
// -->
Auch Dir ein ganz besonders fröhliches Hallo,
was ist falsch an der funktion?
in erster Linie, dass Du nur beim ersten Tag namens "table" einen Wert zurückliefert; nämlich 1 - höhere Werte erlaubst Du nicht, da Du die Schleife sofort unterbrichst, und wenn kein tagName=="table" vorkommt, lieferst Du nicht das geringste zurück.
In zweiter Linie, dass Du Dich auf eine hoffnungslos veraltete Technik (document.all) stützt, die Microsoft eigentlich längst hätte wegschmeißen sollen, und die in anderen Browsern eh nicht funktioniert.
In dritter Linie Deine Fehlerbeschreibung, zu der nämlich auch die Ergebnisse Deiner Problemanalyse gehören.
Cheatah
Auch Dir ein ganz besonders fröhliches Hallo,
Mit dank zurück :)
was ist falsch an der funktion?
in erster Linie, dass Du nur beim ersten Tag namens "table" einen Wert zurückliefert; nämlich 1 - höhere Werte erlaubst Du nicht, da Du die Schleife sofort unterbrichst, und wenn kein tagName=="table" vorkommt, lieferst Du nicht das geringste zurück.
Du meinst
<!--
function anzahltabellen() {
var k = 0;
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1;}
---->else {k;}
}
anztab = anzahltabellen();
document.write(anztab);
}
//-->
?
Problemanalyse: "Out of memory" exception :)
In zweiter Linie, dass Du Dich auf eine hoffnungslos veraltete Technik (document.all) stützt, die Microsoft eigentlich längst hätte wegschmeißen sollen, und die in anderen Browsern eh nicht funktioniert.
Es gibt aber leider keine andere Möglichkeit Tabellen anzusprechen. im DOM gibt es Elemente für Formulare und andere sachen aber leider keines für Tabellen.
In dritter Linie Deine Fehlerbeschreibung, zu der nämlich auch die Ergebnisse Deiner Problemanalyse gehören.
danke für die schnelle hilfe,
Cheatah
Safak
Hi,
in erster Linie, dass Du nur beim ersten Tag namens "table" einen Wert zurückliefert; nämlich 1 - höhere Werte erlaubst Du nicht, da Du die Schleife sofort unterbrichst, und wenn kein tagName=="table" vorkommt, lieferst Du nicht das geringste zurück.
Du meinst
---->else {k;}
nein; ich meine, dass das return an der oder den richtigen Stelle/n stehen soll.
Problemanalyse: "Out of memory" exception :)
Das ist die Fehlermeldung, die ebenfalls immens wichtig ist. Nicht jedoch die Problemanalyse, welche insbesondere aus günstig gesetzten Testausgaben (z.B. alert()) besteht.
Cheatah
Hallo,
Nun habe ich alles mögliche ausprobiert, das "return" und probeausgaben... wenn ich die beiden letzten Zeilen in Funktion mit einschließe passiert garnichts auf der seite, wenn ich sie auserhalb der funktion platziere dann bekomme ich ein "undefined" zurück. die fehlermeldung ist irgendwie verschwunden.
Kannst Du mir eine Lösung vorschlagen?
ich habe bemerkt dass es ganz egal ist ob ich in "body" tag ein onload="anzahltabellen()" mache oder nicht...wird das Script also immer ausgeführt wenn die seite geladen wird, egal ob es ein onload gibt oder nicht?
Die Probeausgaben werden nicht angezeigt, wieso mag der browser meine funktion nicht?
<!--
function anzahltabellen() {
var k = 0;
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1; return k; alert("gefunden!");}
else {return; alert("x");}
}
}
anztab = anzahltabellen();
document.write(anztab);
// -->
Gruß,
Sena
Hallo,
wieso haust du das return immer so zeitig dazwischen?
tagnem prüfen-->bei table das k um 1 erhöhen-->nächster tagname...
nach der for-next schleife ein return machen...
sonst ist bei der ersten table schluss...
einen else zweig brauchst du eigentlich nicht...
zur besseren übersicht bitte nicht alles in eine zeile schreiben...
Odium
Hi,
wenn ich die beiden letzten Zeilen in Funktion mit einschließe passiert garnichts auf der seite,
natürlich nicht, die Funktion wird ja nicht einmal aufgerufen.
Kannst Du mir eine Lösung vorschlagen?
Ich möchte mich der Frage von Odium anschließen. Erkläre mir doch bitte mal, was Deiner Meinung nach 'return' _genau_ macht.
ich habe bemerkt dass es ganz egal ist ob ich in "body" tag ein onload="anzahltabellen()" mache oder nicht...
onLoad ein document.write() durchzuführen resultiert in der Zerstörung des bisherigen Dokuments - da etwas fertigem nichts mehr hinzugefügt werden kann (und onLoad bedeutet "fertig"), wird es vollständig ersetzt.
wird das Script also immer ausgeführt wenn die seite geladen wird, egal ob es ein onload gibt oder nicht?
Es gibt vielfältige Arten, eine JavaScript-Aktion durchzuführen. Nur eine davon ist onLoad, andere benötigen nicht einmal eine Funktion.
Die Probeausgaben werden nicht angezeigt,
Dies wird Dir klar, wenn Du obige Frage richtig beantwortest.
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1; return k; alert("gefunden!");}
Btw, hast Du Dir schon mal eine Testausgabe überlegt, anhand derer Du sehen kannst, wie die if-Abfrage _anschließend_ reagieren wird?
Cheatah
Hi,
wenn ich die beiden letzten Zeilen in Funktion mit einschließe passiert garnichts auf der seite,
natürlich nicht, die Funktion wird ja nicht einmal aufgerufen.
Kannst Du mir eine Lösung vorschlagen?
Ich möchte mich der Frage von Odium anschließen. Erkläre mir doch bitte mal, was Deiner Meinung nach 'return' _genau_ macht.
return sagt mir garnichts. Ich weiß nur dass es wohl sinnvoll ist sowas einzubauen damit man den ermittelten Wert aus einer Funktion "herausholen" kann...Was macht return deiner meinen nach?
ich habe bemerkt dass es ganz egal ist ob ich in "body" tag ein onload="anzahltabellen()" mache oder nicht...
onLoad ein document.write() durchzuführen resultiert in der Zerstörung des bisherigen Dokuments - da etwas fertigem nichts mehr hinzugefügt werden kann (und onLoad bedeutet "fertig"), wird es vollständig ersetzt.
wird das Script also immer ausgeführt wenn die seite geladen wird, egal ob es ein onload gibt oder nicht?
Es gibt vielfältige Arten, eine JavaScript-Aktion durchzuführen. Nur eine davon ist onLoad, andere benötigen nicht einmal eine Funktion.
Die Probeausgaben werden nicht angezeigt,
Dies wird Dir klar, wenn Du obige Frage richtig beantwortest.
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1; return k; alert("gefunden!");}
Btw, hast Du Dir schon mal eine Testausgabe überlegt, anhand derer Du sehen kannst, wie die if-Abfrage _anschließend_ reagieren wird?
Es gibt nicht sehr viele möglichkeiten ein "alert()" einzufügen. ich habe allerdings nun ein weiters Problem:
---------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>ST</title>
<script language="JavaScript" type="text/javascript">
<!--
function anzahltabellen() {
var k = 0;
for (var i=0; i<document.all.length; i++) {
if (document.all[i].tagName=="table") {k = k + 1; alert("gefunden!");}
}
alert("x!")
return;
}
anztab = anzahltabellen();
document.write(anztab);
document.write(document.all[9].tagName);
/*
st = "hi";
kfi = "hallo";
cl = "hehe";
function tooltip() {
for (var i=0; i<anztab; i++) {
for (var j=0; j<document.getElementsByTagName("table")[i].getElementsByTagName("td").length; j++) {
if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="ST"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=st;}
else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="KFI"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=kfi;}
else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="CL"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=cl;}
}
}
} */
// -->
</script>
</head>
<body>
<table width="100%" border="1" name="dokumente">
<tr>
<td> </td>
<td> </td>
<td>ST</td>
<td>KFI</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<table width="100%" border="1" name="dokumente">
<tr>
<td>KFI</td>
<td> </td>
<td> </td>
<td>KFI</td>
<td> </td>
<td>CL</td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</body>
</html>
--------------
oben ist der html code an dem ich arbeite.
Im script in der funktion anzahltabellen() habe ich ein alert("x!" ) stehen welches aufgerufen wird sobald die seite geladen wurde. In die for-schleife komme ich garnicht. ich habe nun probiert
document.write(document.all[9].tagName);
auzurufen, doch dann meldet der browser einen Fehler im script. also wenn man die zahl 9 durch irgendeine zahl zwischen 0 und 8 ersetzt wird das ensprechende tag auch angezeigt im browser. Solbald nun die Zahl 9(<table> ist oder 10(<tr>) gibt es einen Fehler. Dies ist warscheinlich der Grund wieso auch das alert("x!") erscheint, da die Schleife diese table nicht akzeptiert. Ich bin nun ziemlich am Grübeln wie ich das doch schaffen könnte meine tabellen zu zählen.
Ich wäre wirklich sehr dankbar wenn jemand hierfür eine Lösung anbieten könnte.
Gruß,
Sena
Ps: der Rest des scriptes soll anschliessend in der tabelle tooltips implementieren.
Cheatah
Hi,
return sagt mir garnichts.
das ist schon mal schlecht. 'return' ist eine Standard-Funktion, die Du prinzipiell in _jeder_ Programmiersprache findest.
Was macht return deiner meinen nach?
Es liefert den/die angegebenen Wert/e zurück und *beendet die Funktion*. Ansonsten hätte eine Rückgabe nämlich keinen Sinn.
Btw, hast Du Dir schon mal eine Testausgabe überlegt, anhand derer Du sehen kannst, wie die if-Abfrage _anschließend_ reagieren wird?
Es gibt nicht sehr viele möglichkeiten ein "alert()" einzufügen.
Oh doch, die gibt es. Ein alert() muss auch nicht unbedingt einen Text beinhalten - es kann genauso gut (genauer: oftmals besser) eine Variable beinhalten, z.B. genau die, die Du in Deinem if überprüfen möchtest, oder aber auch die length-Eigenschaft, die die Lebenszeit Deiner for-Schleife definiert.
ich habe allerdings nun ein weiters Problem:
Jessas! Warum in Gottfrieds Namen postest Du hier einen *kompletten* HTML-Code?
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
Warum reduzierst Du die Lesbarkeit Deiner Seite auf Systeme, die aus dem Hause Microsoft stammen?
function anzahltabellen() {
...
anztab = anzahltabellen();
Die Funktion wird im <head> notiert und auch aufgerufen, also lange bevor eine Tabelle überhaupt existieren _darf_. So gesehen ist es nicht ungewöhnlich, dass keine solche gefunden wird. Dennoch müssen in der Funktion die return-Werte stimmen, damit sie bei einem Aufruf von geeigneter Stelle auch sinnvolle Ergebnisse liefert.
for (var j=0; j<document.getElementsByTagName("table")[i].getElementsByTagName("td").length; j++) {
Hier setzt Du plötzlich auf DOM, während Du Dich oben noch auf IE-Browser (4-6) reduziert hast. Warum?
Im script in der funktion anzahltabellen() habe ich ein alert("x!" ) stehen welches aufgerufen wird sobald die seite geladen wurde.
"Sobald die Seite geladen wurde" bedeutet: "Nachdem der Seite per document.write() auf gar keinen Fall mehr etwas hinzugefügt werden kann".
In die for-schleife komme ich garnicht.
Testausgaben.
document.write(document.all[9].tagName);
Kein schlechter Anfang.
auzurufen, doch dann meldet der browser einen Fehler im script.
"Ein Fehler" ist nutzfrei. Welcher Fehler? Ach, ich vergaß - die Fehlermeldungen des IE sind ebenfalls nutzfrei, und außerhalb des IE läuft Dein Script eh nicht.
also wenn man die zahl 9 durch irgendeine zahl zwischen 0 und 8 ersetzt wird das ensprechende tag auch angezeigt im browser.
Ungewöhnlich, es sollte die gleiche Fehlermeldung geben.
Ps: der Rest des scriptes soll anschliessend in der tabelle tooltips implementieren.
Warum machst Du das nicht einfach mittels des title-Attributs?
Cheatah
hallo nochmals,
erstmal:
HILFE!!! *g*
Nur kurz zum title attribut: Das Ziel des scriptes ist es in einer html datei voll mit tabellen jede einzelne Zelle zu überprüfen und entsprechende tooltips zu setzen. Dies ist notwendig da die tabellen später erweiterbar sein sollen und die tooltips sollen dann automatisch gesetzt werden....
den rest versteh ich einfach nicht, muss ich mir nocheinwenig anschauen....aber wieso ist da so eine unstimmigkeit mit DOM und IE??....
rest folgt...
Gruß,
Sena
Hi,
return sagt mir garnichts.
das ist schon mal schlecht. 'return' ist eine Standard-Funktion, die Du prinzipiell in _jeder_ Programmiersprache findest.
Was macht return deiner meinen nach?
Es liefert den/die angegebenen Wert/e zurück und *beendet die Funktion*. Ansonsten hätte eine Rückgabe nämlich keinen Sinn.
Btw, hast Du Dir schon mal eine Testausgabe überlegt, anhand derer Du sehen kannst, wie die if-Abfrage _anschließend_ reagieren wird?
Es gibt nicht sehr viele möglichkeiten ein "alert()" einzufügen.
Oh doch, die gibt es. Ein alert() muss auch nicht unbedingt einen Text beinhalten - es kann genauso gut (genauer: oftmals besser) eine Variable beinhalten, z.B. genau die, die Du in Deinem if überprüfen möchtest, oder aber auch die length-Eigenschaft, die die Lebenszeit Deiner for-Schleife definiert.
ich habe allerdings nun ein weiters Problem:
Jessas! Warum in Gottfrieds Namen postest Du hier einen *kompletten* HTML-Code?
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
Warum reduzierst Du die Lesbarkeit Deiner Seite auf Systeme, die aus dem Hause Microsoft stammen?
function anzahltabellen() {
...
anztab = anzahltabellen();
Die Funktion wird im <head> notiert und auch aufgerufen, also lange bevor eine Tabelle überhaupt existieren _darf_. So gesehen ist es nicht ungewöhnlich, dass keine solche gefunden wird. Dennoch müssen in der Funktion die return-Werte stimmen, damit sie bei einem Aufruf von geeigneter Stelle auch sinnvolle Ergebnisse liefert.
for (var j=0; j<document.getElementsByTagName("table")[i].getElementsByTagName("td").length; j++) {
Hier setzt Du plötzlich auf DOM, während Du Dich oben noch auf IE-Browser (4-6) reduziert hast. Warum?
Im script in der funktion anzahltabellen() habe ich ein alert("x!" ) stehen welches aufgerufen wird sobald die seite geladen wurde.
"Sobald die Seite geladen wurde" bedeutet: "Nachdem der Seite per document.write() auf gar keinen Fall mehr etwas hinzugefügt werden kann".
In die for-schleife komme ich garnicht.
Testausgaben.
document.write(document.all[9].tagName);
Kein schlechter Anfang.
auzurufen, doch dann meldet der browser einen Fehler im script.
"Ein Fehler" ist nutzfrei. Welcher Fehler? Ach, ich vergaß - die Fehlermeldungen des IE sind ebenfalls nutzfrei, und außerhalb des IE läuft Dein Script eh nicht.
also wenn man die zahl 9 durch irgendeine zahl zwischen 0 und 8 ersetzt wird das ensprechende tag auch angezeigt im browser.
Ungewöhnlich, es sollte die gleiche Fehlermeldung geben.
Ps: der Rest des scriptes soll anschliessend in der tabelle tooltips implementieren.
Warum machst Du das nicht einfach mittels des title-Attributs?
Cheatah
Hi,
Nur kurz zum title attribut: Das Ziel des scriptes ist es in einer html datei voll mit tabellen jede einzelne Zelle zu überprüfen und entsprechende tooltips zu setzen. Dies ist notwendig da die tabellen später erweiterbar sein sollen und die tooltips sollen dann automatisch gesetzt werden....
nicht nur in Anbetracht der Tatsache, dass JavaScript niemals vorausgesetzt werden darf, möchtest Du glaube ich eine serverseitige Technik verwenden. Das spart Dir auf Dauer viele Probleme.
den rest versteh ich einfach nicht, muss ich mir nocheinwenig anschauen....
Wo genau hast Du denn Probleme?
aber wieso ist da so eine unstimmigkeit mit DOM und IE??....
Es gibt drei vollkommen unterschiedliche DHTML-Konzepte: document.layers (Netscape 4), document.all (IE 4+) und document.getElementById() (DOM, auch IE 5+). Nur DOM ist zukunftsträchtig. Insbesondere macht es keinen Sinn, document.all zu verwenden, um ein DOM-Script zu füttern.
rest folgt...
Aber bitte nicht in Form eines Komplettzitats :-(
Cheatah
Hi,
Hallo ,
Nur kurz zum title attribut: Das Ziel des scriptes ist es in einer html datei voll mit tabellen jede einzelne Zelle zu überprüfen und entsprechende tooltips zu setzen. Dies ist notwendig da die tabellen später erweiterbar sein sollen und die tooltips sollen dann automatisch gesetzt werden....
nicht nur in Anbetracht der Tatsache, dass JavaScript niemals vorausgesetzt werden darf, möchtest Du glaube ich eine serverseitige Technik verwenden. Das spart Dir auf Dauer viele Probleme.
Das stimmt, es soll serverseitig sein
den rest versteh ich einfach nicht, muss ich mir nocheinwenig anschauen....
Wo genau hast Du denn Probleme?
Ich denke nun verstehe ich das ganze besser. Das ich mich auf den IE beschränke ist keinesfall gewollt, das macht Frontpage automatisch...Frag mich aber nicht warum ich denn überhaubt Frontpage benutze; wenns nach mir ginge würde ich alles per hand schreiben ;)
aber wieso ist da so eine unstimmigkeit mit DOM und IE??....
Es gibt drei vollkommen unterschiedliche DHTML-Konzepte: document.layers (Netscape 4), document.all (IE 4+) und document.getElementById() (DOM, auch IE 5+). Nur DOM ist zukunftsträchtig. Insbesondere macht es keinen Sinn, document.all zu verwenden, um ein DOM-Script zu füttern.
Das habe ich nicht gewusst. Tatsache ist ich habe selfhtml auch noch garnicht von vorne bis hinten gelesen *g* soll man das überhaubt?
rest folgt...
Aber bitte nicht in Form eines Komplettzitats :-(
Cheatah
Ich merke gerade meine Probleme sind immernoch nicht gelöst....ich arbeite daran *seufz*
grüße,
Sena
Hi,
Das stimmt, es soll serverseitig sein
dann nehme ich an, dass Du weder JavaScript noch Frontpage verwenden willst.
Frag mich aber nicht warum ich denn überhaubt Frontpage benutze; wenns nach mir ginge würde ich alles per hand schreiben ;)
Dann mach es. Insbesondere bei Dingen, die in der MS-Welt anders funktionieren als in der richtigen Welt, sollte man sich auf keinen Fall auf ein MS-Produkt verlassen. Bei serverseitigen Dingen sowieso.
Tatsache ist ich habe selfhtml auch noch garnicht von vorne bis hinten gelesen *g* soll man das überhaubt?
Also, ich hab's auch nicht gemacht. Die Frage lautet eher: _Kann_ man das überhaupt?
Cheatah
<html>
<head> <title>Tabelle</title>
<meta name="" content=""> <base target="_blank"> <meta name="" content="">
<script language="JavaScript" type="text/javascript"> <!--
st = "a"; kfi = "b"; cl = "c"; gl = "d"; fo = "e"; cd = "f";
function tooltip() {
for (var i=0; i<document.getElementsByTagName("table").length; i++) { for (var j=0; j<document.getElementsByTagName("table")[i].getElementsByTagName("td").length; j++) { if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="ST"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=st;} else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="KFI"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=kfi;} else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="CL"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=cl;} else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="GL"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=gl;} else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="FO"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=fo;} else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="CD"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=cd;}
} } }
// --> </script>
</head>
<body onLoad="tooltip()" style="word-spacing: 0; line-height: 100%; margin-top: 0; margin-bottom: 0">
<p style="line-height: 100%; word-spacing: 0; text-indent: 0; margin: 0"> </p>
<p style="line-height: 100%; word-spacing: 0; text-indent: 0; margin: 0" align="center"> </p> <table border="0" width="368" cellpadding="0" cellspacing="0"> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">ST</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">a</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">KFI</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">b</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">CL</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">c</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">GL</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">d</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">FO</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">e</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"><font face="Arial" size="2">CD</font></td> <td align="center" width="32"><font face="Arial" size="2">=</font></td> <td width="317"><font face="Arial" size="2">f</font></td> </tr> <tr> <td align="left" width="12"></td> <td align="left" width="25"></td> <td align="center" width="32"></td> <td width="317"></td> </tr> </table> <table border="0" cellpadding="0" cellspacing="1" width="890"> <tr> <td align="left" width="884"> <p align="right"><b><font size="2" face="Arial"></font></td> </tr> </table>
<table border="1" width="889" height="1147" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000">
<tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font size="2" face="Arial">FO</font></td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> <tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font face="Arial" size="2">GL</font></td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> <tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font face="Arial" size="2">GL</font></td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> <tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font size="2" face="Arial">FO</font></td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font face="Arial" size="2"></font></td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial">02</font></td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> <tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font face="Arial" size="2"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font face="Arial" size="2"></font></td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font face="Arial" size="2"></font></td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial">00</font></td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> <tr> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid" bordercolor="#000000" bordercolorlight="#000000" bordercolordark="#000000"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"> </td> <td width="34" height="19" bgcolor="#CCCCCC" align="center" style="border-style: solid"><font size="2" face="Arial">FO</font></td> <td width="460" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="204" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial"></font></td> <td width="122" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="37" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"><font size="2" face="Arial">02</font></td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> <td width="45" align="center" height="19" bgcolor="#CCCCCC" style="border-style: solid"> </td> </tr> </table>
<font face="Arial">
Hallo,
kleiner Tip:
vielleicht solltest du mich mal für eins entscheiden. Du benutzt CSS und Direktformatierungen quer durcheinander. Mit einem externen Stylesheet könntest du deinen Quelltext wesentlich kürzen.(z.B. bei bgcolor)
Grruß,
Henning
<td align="left" width="12">
</td>
dannn klappt's. Sonst ist dein firstChild nämlich leer, also Null!
<td align="left" width="12">
</td>
dannn klappt's. Sonst ist dein firstChild nämlich leer, also Null!
Danke für den Hinweis! ich habe alles was null ich durch ersetzt. Jetzt gibt es keine Fehler meldung mehr. doch es funktioniert nicht.Hast du es ausprobiert?
Gruß,
Sena
<td align="left" width="12">
</td>
dannn klappt's. Sonst ist dein firstChild nämlich leer, also Null!
Danke für den Hinweis! ich habe alles was null ich durch ersetzt. Jetzt gibt es keine Fehler meldung mehr. doch es funktioniert nicht.Hast du es ausprobiert?
Gruß,
Sena
Der fehler liegt eindeutig bei firstchild.data; damit prüft er nur die erste Spalte von jeder Tabelle also immer nur die erste Zelle...frage ist jetzt nur wie bringe ich ihn dazu jede Zelle anzuschauen??
Gruß,
Sena
Hi,
dannn klappt's. Sonst ist dein firstChild nämlich leer, also Null!
Danke für den Hinweis! ich habe alles was null ich durch ersetzt. Jetzt gibt es keine Fehler meldung mehr.
Der fehler liegt eindeutig bei firstchild.data; damit prüft er nur die erste Spalte von jeder Tabelle also immer nur die erste Zelle...frage ist jetzt nur wie bringe ich ihn dazu jede Zelle anzuschauen??
Nein. Es liegt zum einen an den fehlenden Leerzeichen un dzum zweiten an den <font>-trags. Diese sind nämlich in den jeweiligen Zellen die firstchilds. Stehen ja auch vor dem Text.
Mach die <fonts></fonts> raus und da wo leer ist rein: es klappt.
Ich würd eh das ganze Frontpage-Geschmiere rausmachen und anständig mit css formatieren. Dann blickt man auch den Quelltext besser.
Gruß,
Ronny
document.getElementsByTagName("table")
.length = ??
Das sollte des Rätsels Lösung sein oder?
Gruß
Mal kurz zusammengefasst :
<head>
<script language="JavaScript" type="text/javascript">
<!--
function tst() {
alert( document.getElementsByTagName("table").length);
}
//-->
</script>
</head>
<body onLoad="tst()">
<table width="100%" border="1" name="dokumente">
....
und oh Wunder, die Anzahl der Tabellen steht da!
Mal kurz zusammengefasst :
<head>
<script language="JavaScript" type="text/javascript">
<!--
function tst() {
alert( document.getElementsByTagName("table").length);
}
//-->
</script></head>
<body onLoad="tst()">
<table width="100%" border="1" name="dokumente">
....
und oh Wunder, die Anzahl der Tabellen steht da!
Das ist wirklich ein Wunder, da ich das eigentlich schonmal probiert hatte...anscheinend hat der Rest damals nicht gestimmt und ich dachte es läge am "length" :/ Nun funktioniert das Script aber und ich habe es oben gepostet *g* Vielen dank,
Gruß,
Sena
Es gibt aber leider keine andere Möglichkeit Tabellen anzusprechen. im DOM gibt es Elemente für Formulare und andere sachen aber leider keines für Tabellen.
was ist mit getElementsByTagName() ?http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_tag_name
Es gibt aber leider keine andere Möglichkeit Tabellen anzusprechen. im DOM gibt es Elemente für Formulare und andere sachen aber leider keines für Tabellen.
was ist mit getElementsByTagName() ?http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_tag_name
Mit getElementsByTagName() kannst du die Tabelle ansprechen stimmt. aber du kannst damit nicht die Tabellen zählen wie zb getElementsByTagName("table").length; sowas geht nicht....Es geht darum jede einzelne Tabelle zu prüfen...
Weiß nicht, ob ich es hab erklären können.. :)
Grüße,
Sena
Hallo Sena,
Mit getElementsByTagName() kannst du die Tabelle ansprechen stimmt. aber du kannst damit nicht die Tabellen zählen wie zb getElementsByTagName("table").length; sowas geht nicht....Es geht darum jede einzelne Tabelle zu prüfen...
versuch mal document.getElementsByTagName("table").length.
Gruß, Jürgen
anztab = anzahltabellen();
document.write(anztab);
ich bin mir nicht sicher, aber müsste das da oben nicht auch in die {}
Endlich! Ich danke euch allen :) habe wiedermal viel dazugelernt!
hier der komplette html code, für alle die das script haben wollen:
-------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="" content="">
<meta name="" content="">
<title>Das tooltip-Script</title>
<script language="JavaScript" type="text/javascript">
<!--
st = "Juhu";
kfi = "juhuu";
cl = "haha";
function tooltip() {
for (var i=0; i<document.getElementsByTagName("table").length; i++) {
for (var j=0; j<document.getElementsByTagName("table")[i].getElementsByTagName("td").length; j++) {
if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="ST"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=st;}
else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="KFI"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=kfi;}
else if (document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].firstChild.data=="CL"){ document.getElementsByTagName("table")[i].getElementsByTagName("td")[j].title=cl;}
}
}
}
// -->
</script>
</head>
<body onload="tooltip()">
<table width="100%" border="1" name="dokumente">
<tr>
<td> </td>
<td> </td>
<td>ST</td>
<td>KFI</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<table width="100%" border="1" name="dokumente">
<tr>
<td>KFI</td>
<td> </td>
<td> </td>
<td>KFI</td>
<td> </td>
<td>CL</td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</body>
</html>
-------------------------------------
Viele liebe Grüße,
Sena :)
Hi,
function tooltip() {
for (var i=0; i<document.getElementsByTagName("table").length; i++) {
Sag mal, wieso unterscheidest Du die einzelnen Tabellen?
Ich denke document.getElementsByTagName("td").length gibt alle tds einer Seite aus und bezieht sich nicht auf eine bestimmte Tabelle. Deswegen müßte das Skript da: http://forum.de.selfhtml.org/archiv/2002/9/22830/#m126848
auch für mehrere Tabellen funktionieren.
Es sei denn, Du willst einzelne Tabellen auslassen.
Und noch ein Tipp: falls Du viele Tooltips setzten willst, dann würde ich die Tipps und den Abfragetext in ein Array setzten und mit for ... die Abfrage usw. gestallten.
Gruß,
Ronny