Kristof: Vereinfachung, Reduzierung ohne document.write ?

Hallo,

ich suche Moeglichkeiten zur Vereinfachung bzw. Komprimierung von JavaScript wie es auch mit document.write moeglich waere.

Beispiel aus einem Scipt:

Za = x.f6780a.value; if( Za >0 ) Zp(p6780,n6780,6780);
Za = x.f6784a.value; if( Za >0 ) Zp(p6784,n6784,6784);
usw.

Mit document.write in einer Funktion (z.B. function ZaWri(Nummer)) koennten die Zeichenfolgen 6780, 6784 usw. genutzt werden.

Der Aufruf dieser function koennte dann  wesentlich einfacher und kompakter sein:
ZaWri(6780);
ZaWri(6784);
usw.

Wenn nun aber document.write nicht moeglich ist, gibt es Alternativen ?
nochmal das alte Script:
Za = x.f6780a.value; if( Za >0 ) Zp(p6780,n6780,6780)
wird ersetzt durch den kuerzeren Aufruf der Funktion Short:
Short('6780');

Die geplante -so leider nicht laufende- Funktion waere dann:
function Short(Nummer)
{
Za = x.f+Nummer+a.value;
if (Za>0) Zp(p+Nummer,n+Nummer,Nummer);
}

Das Ganze scheitert wohl auch daran, dass p6780 und n6780 bereits definierte Variablen mit Inhalt sind und dass ohne document.write keine "hoehere Ebene" ansprechbar ist.

Gibt es doch aehnliche Moeglichkeiten, habe ich da was uebersehen ?

Danke,
Kristof

  1. Hallo!

    Wie wär's denn mit Arrays?

    wert = new Array (6780,6784,...);

    function Short(Nummer)
    {
    Za = x.fa[Nummer].value;
    if (Za>0) Zp(p[Nummer],n[Nummer],wert[Nummer]);
    }

    Steffen

    1. Vielleicht sollte ich noch etwas anfügen. Bei dieser Variante bekommen die Variablen andere Namen: statt p6780, p6784... jetzt p[0], p[1]...
      Dadurch braucht das Array erstens keine 6784+ Felder groß zu sein (ich nehme an, daß die Werte nicht fortlaufend sind). Zweitens kannst du die ganzen Za- bzw. Zb-Aufrufe in einer for-Schleife zusammenfassen.

      Steffen

  2. moin..

    Die geplante -so leider nicht laufende- Funktion waere dann:

    »»  function Short(Nummer)

    {

    »»  Za = x.f+Nummer+a.value;
    »»  if (Za>0) Zp(p+Nummer,n+Nummer,Nummer);

    }

    kannst du die elemente wie "f+Nummer+a" in ein array packen? also sowas wie

    Za = x.fa[Nummer].value;
    if ( Za > 0) {
       Zp (p[Nummer], n[Nummer], Nummer);
    }

    wuerde dann funzen.

    so long
        sebastian

  3. Hi Kristof!

    »»  function Short(Nummer)

    {

    »»  Za = x.f+Nummer+a.value;
    »»  if (Za>0) Zp(p+Nummer,n+Nummer,Nummer);

    }

    Was Du suchst, ist wohl die eval()-Funktion (<../../tecm.htm#a2>). Das saehe dann so aus:

    function Short(Nummer) {
            Za = eval("x.f" + Nummer + "a.value;");
            if (Za > 0) Zp(eval("p" + Nummer), eval("n" + Nummer), Nummer);
            /* Oder alternativ:
            if (Za > 0) eval("Zp(p" + Nummer + ", n" + Nummer + ", " + Nummer + ");");  */
        }

    Wenn Du so viele Variablen hast, sind Arrays aber vermutlich doch vorzuziehen. In den anderen Antworten steht das ja.

    Das Ganze scheitert wohl auch daran, dass p6780 und n6780 bereits definierte Variablen mit Inhalt sind und dass ohne document.write keine "hoehere Ebene" ansprechbar ist.

    Mit eval() sprichst Du eben genau diese "hoehere Ebene" an.

    Bye, Calocybe

    1. Mit eval() sprichst Du eben genau diese "hoehere Ebene" an.

      Hallo,

      besten Dank, das waere zunaechst die einfachste Loesung, aber eval() ist wenn ich‚s richtig verstanden habe wohl nur fuer numerische Ausdruecke geeignet.
      Vielleicht geht sowas mit String(), werd ich mir anschauen.
      Gruesse,
      Kristof

      1. Hallo Kristof,

        »»aber eval() ist wenn ich‚s richtig verstanden »»habe wohl nur fuer numerische Ausdruecke »»geeignet.

        das ist nicht ganz richtig. Die Funktion eval() erwartet einen String als Argument. Der Vorteil ist, dass diese Funktion einen String, den man zusammensetzt als JavaScript-Ausdruck interpretiert. Hier stehts ganz ausfuehrlich:
        http://developer.netscape.com/docs/manuals/js/client/jsref/toplev.htm#1063795.

        es müßte eigentlich genauso funktionieren wie calocybe es geschrieben hat.

        Viele Gruesse
        FJH

        Gruesse,

        »»  Kristof

        1. Hallo,

          es müßte eigentlich genauso funktionieren wie calocybe es geschrieben hat.

          danke, es klappt einwandfrei, genau das war‚s !

          Gruesse,
          Kristof