Ist das Script noch einfacher aufbaubar?
KD-one
- javascript
Ich habe ein kleines Script geschrieben, mit dem man einzelne Tabellenzeilen verbergen oder auch anzeigen kann.
<head>
<style type="text/css">
<!--
.eins { visibility:visible; }
.zwei { visibility:hidden; }
//-->
</style>
<script type="text/javascript">
<!--
function change(i,klasse)
{
if(i<3)
{
document.getElementsByTagName("tr")[i].className = klasse;
}
else if(i>=3)
{
for(i>0;i--;)
document.getElementsByTagName("tr")[i].className = klasse;
}
}
//-->
</script>
</head>
Nun meine Frage dazu: Mich stört es etwas, daß aufgrund der for-Schleife es anscheinend nötig ist, denselben Aufruf zweimal im Script zu haben, geht das nicht einfacher?
PS: Muss dazusagen, daß Ich eher keine große Leuchte auf dem Gebiet JS bin, also ersuche ich um allgemeinverständliche Erklärungen.
Unten habe ich noch einen Link zu einer Testseite eingefügt, damit man es sich besser vorstellen kann.
Sup!
Du kannst die Zeile, die die Arbeit verrichtet, noch in eine eigene Funktion auslagern, dann ist es - aus Sicht funktionaler Programmierung - schöner, aber im Endeffekt, bei so einem bisschen doppelten Code, ist es egal.
Gruesse,
Bio
Ok, danke, hab ich fast so befürchtet.
Werde es also so lassen, wenn es nicht wirklich was bringt. Es war sowieso eher die Optik, die mich gestört hat, von der Funktionalität her gibt es so auch keine Probleme.
Gruß
Kurt
Hallo Bio,
Ich hab's trotzdem noch geändert, so gefällt's mir wesentlich besser. :-)
<script type="text/javascript">
<!--
function change(i,klasse)
{
if(i<3)
{
document.getElementsByTagName("tr")[i].className = klasse;
}
else if(i>=3)
{
change_run(i,klasse)
}
}
function change_run(i,klasse)
{
for(i>0;i--;)
change(i,klasse)
}
//-->
</script>
Danke für den Tip!
Gruß
Kurt
Hi,
<script type="text/javascript">
<!--
function change(i,klasse)
{
if(i<3)
{
document.getElementsByTagName("tr")[i].className = klasse;
}
else if(i>=3)
{
change_run(i,klasse)
}
}function change_run(i,klasse)
{
for(i>0;i--;)
change(i,klasse)
}
//-->
</script>
Ich glaube, Du hast das falsch verstanden.
Bio meinte wohl, Du sollst document.getElementsByTagName("tr")[i].className = klasse; in eine eigene Funktion packen.
Mein Tipp wäre:
<script type="text/javascript">
<!--
function change(i,klasse)
{
for(var k=i;k>=0;k--) if((k==i || i>=3 )&& k<3) document.getElementsByTagName("tr")[k].className = klasse;
}
//-->
</script>
Grüße,
Ronny
<script type="text/javascript">
<!--
function change(i,klasse)
{
for(var k=i;k>=0;k--) if((k==i || i>=3 )&& k<3) document.getElementsByTagName("tr")[k].className = klasse;
}
//-->
</script>
Hi Ronnie,
Ist klar, funktioniert auch prächtig, aber die Funktion ist mir nicht ganz klar.
Du definierst in der For-Schleife eine Variable namens k.K übernimmt den Wert von i.
Wenn k größer/gleich 0 ist, setzt du den Zähler in Gang.
Wieso aber wird dert Zähler definitiv nur dann angeworfen, wenn igrößer/gleich 3 ist???
In der if-Bedingung hast du doch ein logisches Oder angewandt, und....
Ach so, jetzt blitzt es. :-) Wenn die Bedingung i>=3 erfüllt ist, verzweigt das Script auf den Zähler, durch die && Verknüpfung auch denn, wenn i schon runtergezählt ist.
Durch die Bedingung k==i || i>=3 )&& k<3 wird ein übergebener Wert unter drei jedoch nicht in die Schleife übergeben, sondern einmalig durchgeführt.
Eine kleine Unsicherheit besteht aber noch:
Durch das Oder wird ja geprüft, ob entweder die Bedingung k==i richtig ist oder i>=3.
k ist aber in der for-Schleife mit i verknüpft und müsste folglich immer ==i sein????
Hab ich das so nun richtig verstanden?
Wäre nett, wenn du mir das noch erklären könntest. :-)
PS.: Geil, echt was zum dazulernen! ;-)
Gruß
Kurt
Hi,
<script type="text/javascript">
<!--
function change(i,klasse)
{
for(var k=i;k>=0;k--) if((k==i || i>=3 )&& k<3) document.getElementsByTagName("tr")[k].className = klasse;
}
//-->
</script>Hi Ronnie,
Ronny mit "y" (-;
Ist klar, funktioniert auch prächtig, aber die Funktion ist mir nicht ganz klar.
Also:
Ich hoffe so ist es verständlich.
Aber vorsicht. Dieses Skript ist nur brauchbar bei kleinen Tabellen. Wenn Du mal sehr viele Zeilen hast verschwendet es Zeit, da es immer alle Zeilen durchzählt.
Wo die Grenze liegt weiß ich nicht.
Grüße,
Ronny
Hi,
<script type="text/javascript">
<!--
function change(i,klasse)
{
for(var k=i;k>=0;k--) if((k==i || i>=3 )&& k<3) document.getElementsByTagName("tr")[k].className = klasse;
}
//-->
</script>Hi Ronnie,
Ronny mit "y" (-;
Sorry fur den Lapsus. ;-)
- for(var k=i;k>=0;k--) zählt von i bis 0 rückwärts; k läuft, i bleibt konstant
- && k<3) schaut nach, ob k (der Zähler) kleiner 3 ist, damit nicht versucht wird, eine tr anzusprechen, die es nicht gibt.
- (k==i || i>=3) genau die eine Zeile oder alle Zeilen
Ich hoffe so ist es verständlich.
Ja, ich denke, jetzt hab ich die Funktionsweise kapiert. Ganz schön clever. ;-)
Aber vorsicht. Dieses Skript ist nur brauchbar bei kleinen Tabellen. Wenn Du mal sehr viele Zeilen hast verschwendet es Zeit, da es immer alle Zeilen durchzählt.
Wo die Grenze liegt weiß ich nicht.
Kein Problem, bisher wird es ja nur bei einer kleinen Tabelle eingesetzt, wenn ich es mal größer brauch', habe ich hoffentlich schon soviel dazugelernt, daß ich es selbst umschreiben kann.
Danke dir!
Gruß
Kurt