Thomas: Objekte automatisch initialisieren

Hallo Leute
Ich arbeite an einer ASP-Seite, die dynamisch ein Menü kreiert. Die Seite funktioniert, nur den DHTML-Teil muss ich noch zum laufen bringen. Dabei habe ich folgendes Problem: Die Anzahl div-Bereiche variieren, wobei die Namen Submen1, Submen2,... Submen(n) sind. Nun muss ich diese irgenwie initialisieren. In normalem DHTML sieht das ja etwa folgendermassen aus:

submen1 = Submen1.style;
 submen2 = Submen2.style;
 ...

Und dann käme noch der Netscape-Teil. Kann man die Elemente irgendwie automatisch initialisieren, damit die Anzahl variieren kann?

Mit freundlichen Grüssen und bestem Dank

Thomas

  1. eine JS-Datei schreiben, die in der ASP Seite einbinden
    <script type="..." src="...js"></script>, über
    <body ....onload="js_func()" anschubsen --> sollte klar sein

    dann in der function:

    for (i=1;i<=anz;i++) {
    var div = document.createElement('div');
    var text= document.createTextNode('mein Text');
    div.name = 'submen'+String(i);
    [wenn name nur einmal verwendet, dann besser: div.id = ...]
    div.appendChild(text);
    div.style.anything='anywhat'; // siehe selfhtml->JS->Objekte->style
    document.getElementByTagName('body').appendChild(div);}

    create??? sind document-Mothoden
    apendChild ist eine Methode des Node-Objekts

    Achtung: geht alles erst ab IE 5.x bzw Netscape 6.0

    Gruß Andreas

    1. Vielen Dank für deine Antwort, doch wenn ich das richtig sehe kreierst du die div-Elemente erst im JavaScript oder? Ich hab die divs jedoch schon wie in einer normalen HTML-Datei. Nun soll das Skript schauen, wieviele es gibt und diese initialisieren. Ich versuchs mal in meiner 'Gedankenprogrammiersprache' auszudrücken:

      Variable i
      i ist 0
      wenn IE
        für jedes div
          men(i) ist Submen(i).style
          i plus plus // ;-)
        nächstes

      das mit dem 'für jedes' und das 'men(i)' bzw 'Submen(i)' konnte ich noch nicht in JavaScript übersetzen.

      1. Hi Thomas,

        würde es Dir helfen, das ganze über ein Array zu regeln? Dann hättest Du nämlich tatsächlich men[i] und submen[i] und kannst anhand von length auslesen, wieviele Elemente das Array hat und weißt damit, von wo bis wo die for-Schleife laufen muss.
        Das wäre dann sehr ähnlich Deiner Gedanken-Programmiersprache :-)

        Grüße,

        Utz

        1. Hi Thomas,

          kann Utz nur zustimmen. Array-Kenntnisse setzte ich aber eigentlich voraus. Und serverseitig schreibt man doch stinknormalen html-code. In ASP muß es doch eine Ausgabe geben, wie Print.

          Also:

          Print "<div attr=$var1 .. style="styleAttr:$attr2...">DIV-Inhalt</div>";

          oder so, also in PHP geht das, das ganze in eine Schleife und fertig. Wenn die einzelen Daten in dieser Datei öfter gebraucht werden, dann vorher oder dabei in ein Array damit.

          Oder wo ist das Problem??

          Gruß
          Andreas

          1. Hallo
            Sorry Jungs, ich hab mich wohl nicht so klar ausgedrückt, das mit dem ASP hätte ich wohl besser weggelassen: Meine ASP-Seite generiert aus einem Konfigurationsfile ein Menü. Punkt. Ab nun ist ASP nicht mehr zuständig, denn die Site ist schon beim Browser. Das funktioniert alles (auch mit einigen Arrays und mit der 'Print'-funktion Response.Write).
            Ich habe auch schon DHTML-Seiten gemacht, die Ebenen aus- und einblenden, ist kein Problem, da ich die Anzahl Ebenen weiss und diese initialisieren kann. Sieht für den IE und die Ebenen Submen1- Submen3 ja folgendermassen aus:

            smen1 = Submen1.style;
            smen2 = Submen2.style;
            smen3 = Submen3.style;

            Nun weiss ich jedoch nicht, wieviele solche Ebenen in meiner (generierten) Seite vorkommen! Ich dachte, dass es am einfachsten wäre (wenn dies überhaupt möglich ist), das (feste) JavaScript in der generierten Seite automatisch jede Ebene zu initialisieren. Hab mir auch gedanken gemacht, ob dies mit einem Array möglich sei, habs jedoch nicht hinbekommen.

            Nochmals: Ich suche ein JavaScript, welches für jede Ebene irgend was tun kann (sollte ich dann selbst erweitern können).

            Mit freundlichen Grüssen und bestem Dank

            Thomas

            1. Hi Thomas,

              Du kannst natürlich grundsätzlich mit DOM-Methoden rausfinden, wieviele DIVs das sind - über getElementByTagName() eine Collection aller DIVs anlegen, dann durchsuchen, welche der DIVs auf Deine Kriterien zutreffen, das Dir dann wieder irgendwo merken usw. usf. Das klingt nicht nur aufwändig, das ist es auch, und es geht erst ab IE 5/NS 6.

              Der bessere Weg wäre: Lass Dein ASP den JavaScript-Code schreiben, der das Array füllt. Clientseitig hast Du dann direkt einen korrekt gefüllten Array zur Verfügung, mit dem Du problemlos rumspielen kannst.

              Grüße,

              Utz

              1. Das wird natürlich immer komplizierter

                in ASP/PHP/Perl HTML zu schreiben geht ja noch
                in JS HTML schreiben gaht ja ebenfalls

                aber in ASP jetzt JS zu schreiben, welches dann auch noch richtigen HTML-code schreibt und dann auch noch auf allen Browser dieser Welt funktionieren soll und mit mehrdim. Arrays auf allen Ebenen und vielleicht auch noch mit dem IE-spezifischen all-Objekt und den Netscape-spezifischen Layern oder so hantiert.

                Also bei aller Liebe zur Programmiererei, da muß man doch schon 10-dimensional denken können ;-)

                gehe ich richtig in der Annahme, daß Du in ASP alles erzeugst, dann in JS aber nicht weißt, wieviele Elemente Du erzeugt hast? Aber das Namens-Schema ist immer gleich, also:

                subMen<zahl>
                ?

                Dann schreib doch den Head-Teil Deiner HTML-Datei in ASP einfach so:

                <script type="text/javascript">
                var jsAnzahl=<%=$myAspAnzahl%>;
                </script>

                <script type="text/javascript" src="myscript.js"></script>

                dann solltest Du (hoffe ich) die Variable jsAnzahl in den Funktionen der myscript.js-Datei kennen

                dann brauchst Du dort nur den Namen dort zusammenbauen, also Beispiel:
                for (i=1 ; i<jsAnzahl ; i++)
                document.all[submen+i].wasweißich

                isses das?

                1. Moin!

                  in ASP/PHP/Perl HTML zu schreiben geht ja noch
                  in JS HTML schreiben gaht ja ebenfalls

                  aber in ASP jetzt JS zu schreiben, welches dann auch noch richtigen HTML-code schreibt und dann auch noch auf allen Browser dieser Welt funktionieren soll und mit mehrdim. Arrays auf allen Ebenen und vielleicht auch noch mit dem IE-spezifischen all-Objekt und den Netscape-spezifischen Layern oder so hantiert.

                  Du hast ja deswegen ASP, damit du dir die HTML-Schreiberei mit Javascript sparen kannst. SOOO dynamisch können die Seiten garnicht sein, daß man ASP UND Javascript zum Generieren braucht. Javascript sehe ich immer als Notlösung an, wenn serverseitig nichts geht.

                  - Sven Rautenberg

                  1. Moin moin liebe Sportsfreunde! (auch wenn Sport=Mord ist ;-)
                    Scheint als versteht ihr mich immer noch nicht. Inzwischen habe ich jedoch das Problem gelöst. Damit ihr dennoch wisst, was ich genau wollte: JavaScript ist nur für die Dynamik der Seitenelemente, dh. Ebene ausblenden, Ebene einblenden. Schluss. Punkt. So hab ich die Datei auch problemlos hinbekommen. Nun wollte mein Chef jedoch die Menüstrucktur (die Untermenüs liegen in den Ebenen, die erscheinen und verschwinden sollen) aus einem Konfigurationsfile heraus erzeugen. Dazu verwende ich ASP. Die Datei wird ausgelesen und die <div...>s geschrieben. Nun musste ich jedoch auch das JavaScript an die Anzahl Ebenen anpassen. Habs mit ASP geschafft, ohne Array. Die Site muss nur auf IE 5.0 (ev. auch Netscape 4.07) laufen, da sie bei uns im Intranet steht. Die fixfertige Site sieht etwa so aus wie http://www.schindler.ch.

                    Wie gesagt, die Site steht nun und funktionieren tut sie auch. Nochmals vielen Dank für all eure Antworten.

                    Mfg

                    Thomas

  2. Moin, du!

    Ich arbeite an einer ASP-Seite, die dynamisch ein Menü kreiert. Die Seite funktioniert, nur den DHTML-Teil muss ich noch zum laufen bringen. Dabei habe ich folgendes Problem: Die Anzahl div-Bereiche variieren, wobei die Namen Submen1, Submen2,... Submen(n) sind. Nun muss ich diese irgenwie initialisieren. In normalem DHTML sieht das ja etwa folgendermassen aus:

    submen1 = Submen1.style;
    submen2 = Submen2.style;
    ...

    Wieso "initialisieren"? Das hängt doch ziemlich davon ab, wie du dein Menü aufgebaut hast.

    Unabhängig davon: Du schreibst mit ASP eine komplette HTML-Seite. Du kannst auch Javascript schreiben. Du kannst überhaupt alles schreiben.

    Wenn du also in ASP ein Array mit den für die jeweilige Seite zuständigen DIVs hast, dann schreibst du an den passenden Stellen einfach eine Schleife, die sovielmal Code oder Text ausgibt, wie DIVs da sind.

    Und dann käme noch der Netscape-Teil. Kann man die Elemente irgendwie automatisch initialisieren, damit die Anzahl variieren kann?

    Du mußt nichts automatisch initialisieren, wenn du die Menge an Initialisierung mit der Menge an DIVs abgleichst. Dann initialisiert der Browser bei 3 DIVs nur 3 DIVs, und bei 5 DIVs dann 5 DIVs.

    Deine Überlegung muß sein:
    "Ich erstelle die HTML-Seiten manuell... Was muß ich wo jeweils ändern, damit die Seiten funktionieren. Und das macht dann ASP für mich." :)

    - Sven Rautenberg