Dirk Labonte: Einstellen der class eines div per script

Hallo Zusammen.

Um auf einer Seite je nach klick einige Elemente anzuzeigen oder auch nicht will ich ein Script verwenden, das in abhängigkeit eines Parameters (ID) zunächst alle tieferen Elemente (Länge der ID ist größer) ausblendet und dann (fehlt hier) die richtigen einblendet. Die div Tags sind entsprechend geschachtelt, die id´s ok und die Klassen 'hide' und 'show' (hier nicht verwendet) per css vereinbart.

<script type="text/javascript">
<!--
function activate(who){
n=who.length-1;
count = document.getElementsByTagName('div').length;
for (var i = 0; i <= count-1; i++){
IDlen = document.getElementsByTagName('div')[i].id.length;
if (IDlen>n) {
document.getElementsByTagName('div')[i].classname ='hide';
}
}
}
//-->
</script>

Das script läuft, aber es ändert nichts an der Darstellung. Über alert habe ich auch geprüft ob classname gesetzt ist.
Ein entsprechendes Beispiel unter
http://selfhtml.teamone.de/javascript/objekte/all.htm#class_name
scheint auch nicht zu funktionieren.

Kann da jemand helfen?

Vielen Dank für das Interesse.

Dirk

  1. Hallo Zusammen.

    Moin!

    Um auf einer Seite je nach klick einige Elemente anzuzeigen oder auch nicht will ich ein Script verwenden, das in abhängigkeit eines Parameters (ID) zunächst alle tieferen Elemente (Länge der ID ist größer) ausblendet und dann (fehlt hier) die richtigen einblendet. Die div Tags sind entsprechend geschachtelt, die id´s ok und die Klassen 'hide' und 'show' (hier nicht verwendet) per css vereinbart.

    Obwohl deine Vorgehensweise im Prinzip ja ganz vernünftig erscheint, wage ich doch zu bezweifeln, daß es Sinn macht. Deine zwei Klassen können sich doch höchstens in "visibility:visible" und "visibility:hidden" unterscheiden, alles andere ist gleich.

    Um solche einzelnen Dinge zu ändern, mach es so, wie alle anderen Programmierer vor dir und ändere einfach die Eigenschaft "visibility" der Layer. Dazu gibts sogar noch ein wenig Code von mir:

    ns4 = (document.layers)? true:false
    ie4 = (document.all)? true:false
    v6 = (document.getElementById)? true:false

    function showlayer(layerid)
    {
      if (ns4) document.layers[layerid].visibility = "show"
      else if (v6) document.getElementById(layerid).style.visibility = "visible";
      else if (ie4) document.all[layerid].style.visibility = "visible"
    }

    function hidelayer(layerid)
    {
      if (ns4) document.layers[layerid].visibility = "hide"
      else if (v6) document.getElementById(layerid).style.visibility = "hidden";
      else if (ie4) document.all[layerid].style.visibility = "hidden"
    }

    Getestet in Netscape 4+, IE 4+  und Opera 5+ auf PC/Windows und MacOS.

    - Sven Rautenberg

    1. Hallo Sven.

      Vielen Dank für den Tipp. Ich werde das gleich mal probieren.

      Bleibt aber ein Beigeschmack: Wie kann man die "class" ändern? Auch wenn ich es hier nicht brauche, man könnte ja auch mehr als nur "Hidden oder nicht" damit machen. (Ist mehr sportlicher Ehrgeiz)

      Hast du dir das Beispiel in SelfHTML mal angesehen? Das scheint ja auch nicht zu gehen. Sonst schreiben die schon mal "...klappt aber micht..." oder so.

      Falls du keine Idee hast, auch egal.

      Also nochmals vielen Dank!

      mfg

      Dirk

      1. Hallo Sven.

        Moin nochmal!

        Bleibt aber ein Beigeschmack: Wie kann man die "class" ändern? Auch wenn ich es hier nicht brauche, man könnte ja auch mehr als nur "Hidden oder nicht" damit machen. (Ist mehr sportlicher Ehrgeiz)

        Ich schreibe einfach keine Seiten, in denen sowas zu geschehen hat, ist doch auch einfach, oder? <img src="http://www.atomic-eggs.com/selfspezial/smild.gif" border=0 alt="">

        Hast du dir das Beispiel in SelfHTML mal angesehen? Das scheint ja auch nicht zu gehen. Sonst schreiben die schon mal "...klappt aber micht..." oder so.

        Ähm, welches Beispiel? Am besten den direkten Link, dann muß ich nicht so lange suchen. SelfHTML hat ungefähr 1325 Beispiele zu allem möglichen.

        - Sven Rautenberg

        1. Hallo Sven.

          Ich schreibe einfach keine Seiten, in denen sowas zu geschehen hat, ist doch auch einfach, oder?

          Naja, das nenne ich Workaround. Offensichtlich teilst du aber den sportlichen Ehrgeiz.

          Ähm, welches Beispiel? Am besten den direkten Link, dann muß ich nicht so lange suchen. SelfHTML hat ungefähr 1325 Beispiele zu allem möglichen.

          http://selfhtml.teamone.de/javascript/objekte/all.htm#class_name

          Da soll per Script der Classname umgeschaltet werden. Bei mir W2K, IE5.0 passiert aber nichts.

          Dirk

          1. Moin!

            http://selfhtml.teamone.de/javascript/objekte/all.htm#class_name

            Da soll per Script der Classname umgeschaltet werden. Bei mir W2K, IE5.0 passiert aber nichts.

            Bei mir passiert was. Aber (dank document.all) naturlich nur im IE (hier 5.5 auf ME). Opera z.B. ändert im IE-Modus (da kann er document.all auch, aber nicht gut) die Klasse im Javascript-Objekt, aber nicht die Anzeige am Bildschirm. :)

            Was den Workaround angeht: Meine Erfahrung zeigt, daß Browser sehr zuverlässing Layer anzeigen und wieder verstecken können. Die Browser können Layer auch dynamisch positionieren. Alles andere können Browser nicht (ganz unabhängig davon, ob einzelne Exemplare es doch können, gehe ich jedenfalls erstmal von dieser Tatsache aus). Von daher würde ich bei solchen Aktionen, wie du sie vorhast, immer zwei Layer basteln und im Wechsel anzeigen, sofern sich auch noch Formatierungen ändern sollen, und nicht nur die Sichtbarkeit. :)

            - Sven Rautenberg