moejoe: mehrere DIVs gleichzeitig ansprechen

moin,

ich möchte mehrere divs gleichzeitig ansprechen, ohne 100te divs zu definieren - die grundinformationen sind immer gleich, nur top, left und der inhalt ändert sich.
hab mir gedacht, gibts allen die gleiche id - ging aber nicht, nur erstes div mit dieser id wurde angesprochen, hab dann auch gelesen, dass es laut spez. nicht zulässig ist.
dann kam mir die idee den div namen mit einer variable zu versehen,
so ca. " #divname[1] " , und dann alle über eine for-schleife anzuspechen  - na gut, ist wohl etwas sehr phantasiert.

hat jemand eine andere idee, wie man dass realisieren könnte ?

gruss,
moejoe

  1. Hallo,

    Damit geht sowas:
    http://selfhtml.teamone.de/css/formate/zentrale.htm#klassen

    Grüße

    Daniel

    1. Damit geht sowas:
      http://selfhtml.teamone.de/css/formate/zentrale.htm#klassen

      hallo nochmal,

      ja, also mit getElementByTagName kann ich es nicht lösen, denn das spricht ja alle div tags an, nicht nur einen teil, so wie ich es brauche.

      wie ich dass mit css-klassen lösen soll hab ich leider nicht verstanden.

      habe da die 2 divs. die versteckt werden sollen:

      <div style="position:absolute; top:20px; left:20px; width:100px; height:100px; background-color:#FFFFFF; z-index:2">

      und

      <div style="position:absolute; top:30px; left:30px; width:100px; height:100px; background-color:#FFFF88; z-index:3">

      wie soll ich denn nun mit css-klassen per eventHandler deren visibility="hidden" setzten ? - blick ich nicht durch.

      gruss,
      moejoe

      1. Hallo,

        wie soll ich denn nun mit css-klassen per eventHandler deren visibility="hidden" setzten ? - blick ich nicht durch.

        Du weist erst einmal allen Divs eine Klasse zu. (z.B. test)
        Und dann kannst Du mit JS folgendes machen:

        var divs = document.getElementsByTagName('div');
        for(var a = 0; a < divs.length; ++a) {
          if(divs[a].class == 'test') {
            divs[a].style.visibility = 'hidden';
          }
        }

        Noch eleganter wäre das CSS-Dom zu verwenden. Damit könntest Du statt der CSS Eigentschaften eines Divs die eine Klasse ändern.
        Das musst Du aber beim W3C nachgucken und wird im IE vermutlich sowieso nicht funktionieren.

        Grüße

        Daniel

        1. hallo,

          leider will das nicht so richtig. der browser meckert schon beim laden der page über folgende zeile:

          if(divs[a].class == 'test') {

          das 'class' passt ihm nicht.

          ne idee ?

          gruss
          moejoe

          1. Hallo moejoe,

            So sollte es gehen:

            if(divs[a].getAttribute('class') == 'test') {

            class ist wohl ein reserviertes Schlüsselwort und kann daher nicht direkt verwendet werden.

            Grüße

            Daniel

            1. hi nochmal,

              ne, klappt leider immernoch nicht.

              Syntax error while loading (line 44)
                divs[a].style.visibility = 'hidden';
              -------^

              egal, ich versuchs morgen weiter.. kein nerv mehr ;)

              besten dank trotzdem

              grüsse
              moejoe

  2. Doch klar, gib ihnen alle die gleiche id und bau dann
    in JavaScript eine Schleife, die in etwa so aussieht:
    (also erstmal die divs)
    <div style="top:100px;" id="dif"></div>
    <div style="top:100px;" id="dif"></div>
    <script type="text/javascript">
    for(i=0;i<dif.length;i++)
    {
    document.dif[i].style.top="101px";
    document.dif[i].innerHTML="text";
    }
    </script>

    Also so funktioniert es jedenfalls im IE. Beim NS und
    für Mozilla muß man erst alle divs in einen Array
    schaufeln, mittes der Funktion getElementsById().
    Irgendwo weiter unten im Forum in SelfHTML oder im
    Archiv gibts mehr dazu.

    1. Hallo AB,

      Bitte keine solchen Scripts verbreiten.
      Eine Id muss immer eindeutig sein. Man darf mehreren Elementen nicht die selbe Id geben und im Mozilla wird das so auch nicht funktionieren.
      Da es darum geht, die Divs mit CSS zu formatieren, ist JS sowieso die denkbar schlechteste Möglichkeit.
      Wenn man aber JS verwendet, sollte man sich da eher eine Lösung mit getElementsByTagName() und dem class Attribut überlegen.

      Grüße

      Daniel

    2. Moin!

      Doch klar, gib ihnen alle die gleiche id und bau dann

      Wahh!!!!1 Eine ID darf in einem Dokument nur ein einziges Mal vorkommen!

      in JavaScript eine Schleife, die in etwa so aussieht:
      (also erstmal die divs)
      <div style="top:100px;" id="dif"></div>
      <div style="top:100px;" id="dif"></div>
      <script type="text/javascript">
      for(i=0;i<dif.length;i++)
      {
      document.dif[i].style.top="101px";
      document.dif[i].innerHTML="text";
      }
      </script>

      Also so funktioniert es jedenfalls im IE. Beim NS und
      für Mozilla muß man erst alle divs in einen Array
      schaufeln, mittes der Funktion getElementsById().

      Die Funktion heißt getElementById() - kein ElementS. Warum wohl? Weil eine ID nur ein einziges Mal im Dokument vorkommen darf und deshalb logischerweise die Funktion nur ein einziges Element zurückliefern muß.

      Irgendwo weiter unten im Forum in SelfHTML oder im
      Archiv gibts mehr dazu.

      Es gibt die Möglichkeit, über getElementsByName() (für Elemente, die das Name-Attribut erlauben - leider sind das nur wenige, z.B. Links und Formularelemente) oder getElementsByTagName() (damit kann man z.B. alle DIV-Elemente direkt ansprechen) auf Elemente zuzugreifen.

      Oder man verwendet Klassen in CSS - das ist wahrscheinlich das einfachste.

      PS: Mir fällt auf, dass in letzter Zeit von dir immer Schnellschüsse als sogenannte "Lösungen" verkauft werden. Nimm dir doch bitte entweder die Zeit, das auch in verschiedenen Browsern auszuprobieren, was du als Lösung vorschlägst, oder halte dich beim Antworten etwas zurück. Ein einleitender Satz wie "Ich habe selber nicht soviel Ahnung, aber geht nicht sowas wie ..." wäre das Mindeste, was man erwarten kann, damit der Fragende zumindest weiß, dass das, was du vorschlägst, nicht funktionieren muß. Ich habe persönlich wenig Lust, hinter dir herzuhechten und Fehler geradezubiegen, werde es aber tun, sobald es notwendig ist. Aber eben nicht kommentarlos.

      - Sven Rautenberg

      --
      Diese Signatur gilt nur am Freitag.
  3. Moin!

    dann kam mir die idee den div namen mit einer variable zu versehen,
    so ca. " #divname[1] " , und dann alle über eine for-schleife anzuspechen  - na gut, ist wohl etwas sehr phantasiert.

    Also mal unter uns, hört ja keiner mit:
    Du möchtest wirklich mit JavaScript (diesem abschaltbaren Ding?) deine
    DIVs teilformatieren?
    Dann schau doch lieber mal in deinem Editor, ob es da nicht die Möglichkeit
    für Shortcuts gibt oder eine Autovervollständigung, die man nutzen kann
    oder zur Not wie damals in den 90'ern "Copy and Paste 'n' Paste 'n' Paste 'n' ...".

    (es gibt nichts auf der Welt, dass man nicht etwas schneller,
     etwas billiger und etwas schlechter machen könnte!)

    Gruß

    Der Hans