Torsten Puschmann: Probleme mit ID-Tag

Wie kann ich im Beispiel-Code am Ende dieser Nachricht die Wertezuweisung in der changetab-Funktion durch eine Schleife realisieren?
Welche Möglichkeit gibt es, den id-Ausdruck im document.all.id-Ausdruck hineinzukonstruieren? Z.B. document.all.("sub"+id).style.backgroundColor. Dies ist natürlich falsch, aber wie geht dies nur?

<html><head><title>Test</title>
<STYLE type=text/css>
BODY {FONT-SIZE: 11px; MARGIN: 0px 0px 2px 0px; COLOR: #000000; FONT-FAMILY: tahoma,sans-serif; BACKGROUND-COLOR: #C8EAFF}
TABLE {BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-SIZE: 11px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px; FONT-FAMILY: tahoma,sans-serif}
A {FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #000066; FONT-FAMILY: tahoma,sans-serif; TEXT-DECORATION: none}
A:link {COLOR: #0202B0}
A:visited {COLOR: #000090}
A:hover {COLOR: #FF00FF}
</STYLE>

<script language="JavaScript">
<!--
function changetab(id)
{
 document.all.sub1.style.backgroundColor = (id==1)?"#daeaf6":"93bee2";
 document.all.sub2.style.backgroundColor = (id==2)?"#daeaf6":"93bee2";
 document.all.sub3.style.backgroundColor = (id==3)?"#daeaf6":"93bee2";
 document.all.sub4.style.backgroundColor = (id==4)?"#daeaf6":"93bee2";
 document.all.sub5.style.backgroundColor = (id==5)?"#daeaf6":"93bee2";
}
//-->
</script>
</head>
<body>
<table>
<tr style='HEIGHT: 19px' bgColor=#93bee2 border=0>
<td>
<a id="sub1" href="javascript:" onclick="changetab(1)">    test1    </a>
<a id="sub2" href="javascript:" onclick="changetab(2)">    test2    </a>
<a id="sub3" href="javascript:" onclick="changetab(3)">    test3    </a>
<a id="sub4" href="javascript:" onclick="changetab(4)">    test4    </a>
<a id="sub5" href="javascript:" onclick="changetab(5)">    test5    </a>
</td>
</tr>
</table>
</body></html>

  1. hi,

    ich hab's nicht getestet aber

    for( i=1; i<6; i++ )
    {
    document.all["sub"+i].style.backgroundColor = irgendeinwert;
    }

    sollte funktionieren.

    gruss
    hartmann

    1. Es funktioniert!
      Den Nagel auf den Kopf getroffen. Da haette ich ja noch lange probieren koennen.
      Mit dem Ausdruck document.GetElementById(objekt).style... hab ich noch keine Erfahrung, werd es aber mal ausprobieren. Auf die Schnelle kam ich hiermit allerdings nicht zum Ziel.

      Vielen Dank fuer die rasche Hilfe.
      Super-Forum, auch wenn etwas chaotisch und unübersichtlich. Für den Umfang fehlt mir einfach die Zeit.

      Gruß Puschi

      1. hi

        Mit dem Ausdruck document.GetElementById(objekt).style... hab ich noch keine Erfahrung, werd es aber mal ausprobieren. Auf die Schnelle kam ich hiermit allerdings nicht zum Ziel.

        das, was da übergeben wird muss ein String sein, also im Arfruf "bla" (mit den " drumherum ;)

        Grüße aus Bleckede

        Kai

        1. Habs natürlich hinbekommen (siehe http://www.geocities.com/puschmanns)!
          Aber gibt es noch eine Möglichkeit herauszufinden, wieviele id's mit Namen "namexxx" vergeben wurden, um sich nicht immer alle "Untermenülängen merken zu müssen? Klar, könnte man über Arrays machen, bringt aber Köpfchen zum Qualmen.
          Außerdem habe ich noch Probleme, daß erst die Bilder vorgeladen werden müssen, bevor daß Menü aufgebaut wird. Manchmal fehlen einige Tab-Bilder obwohl sie schon im Cash stehen (einige werden angezeigt, andere, obwohl gleich, nicht?!).

          Danke und warte noch auf Tips zu DHTML-<BODY>-Change

          Bye

          Puschi

          1. hi

            Aber gibt es noch eine Möglichkeit herauszufinden, wieviele id's mit Namen "namexxx" vergeben wurden, um sich nicht immer alle "Untermenülängen merken zu müssen?

            jede einmal - oder wie jetzt?!

            Grüße aus Bleckede

            Kai

            1. Ne, ne! Möchte mein Menü durch externe Datei automatisch aufbauen lassen. Dabei weiß ich nicht, wieviele Untermenüpunkte jeder Menüpunkt hat. Um aktiven Untermenüpunkt zu markieren, setze ich alle anderen Untermenüpunkte zurück (auf inaktive Farbe). Allerdings ist die Anzahl nun mal unterschiedlich (Untermenüpunkte).
              Kreiert habe ich alle Untermenüpunkte nach Schema:
              id="subtab01-1"    Menüpunkt 01 - Untermenüpunkt 1
              id="subtab01-2"    Menüpunkt 01 - Untermenüpunkt 2
              id="subtab01-3"    Menüpunkt 01 - Untermenüpunkt 3
              id="subtab01-4"    Menüpunkt 01 - Untermenüpunkt 4
              id="subtab02-1"    Menüpunkt 02 - Untermenüpunkt 1
              id="subtab02-2"    Menüpunkt 02 - Untermenüpunkt 2
              id="subtab03-1"    Menüpunkt 01 - Untermenüpunkt 1
              usw.
              So muß ich im Menü 1 3*rücksetzen und 1*setzen
              im Menü 2 1*rücksetzen und 1*setzen
              im Menü 3 nur einmal setzen

              Zur Zeit lasse ich in allen Menüpunkten alle Untermenüpunkte 3*rücksetzen und 1*setzen.
              So z.B. auch subtab03-4, obwohl es diesen gar net gibt. Schlimm?

              Bei meiner Website sind dies allerdings noch mehr Menüpunkte und sicher werden es auch noch mehr!

              Übrigens schade daß ich nicht Forum nicht nach Thema sortieren kann, oder geht dies?

              Tschüß
              Puschi

              Siehe my website (Sorry, bin natürlich noch beim basteln).

  2. hi,

    bitte reduziere Deinen Code auf das Wesentliche. Merke: "document.all" ist veraltet und IE proprietaer.
    Verwende sowas, um Div-Layer-Referenzierungen zu generalisieren:

    // some known objects
    var nc  =  !!(document.captureEvents && !document.getElementById);
    var ie4 =  !!(document.all           && !document.documentElement);
    // einfache div-layer referenzieren
    function dRef(num)  {return (nc? document.layers[num] : (ie4? document.all[num] : document.getElementById(num)))}
    function dRefS(num) {return (nc? document.layers[num] : (ie4? document.all[num].style : document.getElementById(num).style))}
    </script>

    mit dRef("myId") kannst Du nun Layer referenzieren, mit dRefS("myId").irgendwas auf style-Eigenschaften zugreifen.

    Ich rate Dir weiterhin _dringend_, in der hiesigen Doku zu stoebern.

    Gruesse  Joachim

  3. Wie kann ich im Beispiel-Code am Ende dieser Nachricht die Wertezuweisung in der changetab-Funktion durch eine Schleife realisieren?
    Welche Möglichkeit gibt es, den id-Ausdruck im document.all.id-Ausdruck hineinzukonstruieren? Z.B. document.all.("sub"+id).style.backgroundColor. Dies ist natürlich falsch, aber wie geht dies nur?

    am Besten gar nicht. document.GetElementById(objekt).style... nimmt da jeden beliebigen String auf - einfacher geht's wohl nimma...

    document.all sollte _ausschließlich_ für Seiten, wo der MSIE 4.x noch eine Rolle spielt verwendet werden, alles anderen Browser verstehen das da oben besser.

    Grüße aus Bleckede