Andreas: class eines Ankers in einem anderen Frame ändern

Ich hab folgendes Problem. Ich hab ein Frameset. Im linken Frame befindet sich eine Navigation. Wenn ein user auf einen Menüpunkt klickt, wird dieser Hervorgehoben. Das klappt über Javascript. Nun möchte ich dieses Javascript aber erweitern, denn es soll im Frame "content" der Anker mit dem Namen xxx (wird als Variable "ziel" übergeben) eine andere Class bekommen. Also etwas ähnliches wie ich schon habe, nur dass die Aktion in einem anderen Frame ("content") abläuft und die Anker durchgegangen werden sollen. Klickt der User auf einen anderen Link, sollen natürlich wieder alle Anker auf class="normal" zurückgestellt werden und nur der gewünschte Anker seine class auf "aktiv" wechseln.

Wäre klasse, wenn man mir helfen könnte. Stehe natürlich für Rückfragen bereit. Vielen Dank. Bei dem jetzigen Code hat mir ein Forenuser hier geholfen, dessen Name ich leider vergessen hab :(

Hier der Code:

function aktivieren(sender,ziel)  {
  // referenz auf das root element des menus
  var menu = document.getElementById('nav');

// von dort aus alle <a> auflisten
  var alleAElemente = menu.getElementsByTagName('a');

// Jetzt durch alle <a> rauschen
  for(var i = 0; i < alleAElemente.length; i++)
  {
     // setze alle ausser dem Element, das die Funktion gestartet hat auf 'normal'
     alleAElemente[i].className = alleAElemente[i] != sender ? 'normal' : 'aktiv';
  }
  return true;
}

  1. Ist es überhaupt möglich, per Javascript auf andere Frames zuzugreifen und dort die Klassen zu ändern?

    Ich finde leider auch nirgends irgendwelche Dokumentationen ala PHP...

  2. Hallo Andreas

    Ich hab folgendes Problem. Ich hab ein Frameset.

    Ja, das ist ein Problem.

    Im linken Frame befindet sich eine Navigation. Wenn ein user auf einen Menüpunkt klickt, wird dieser Hervorgehoben. Das klappt über Javascript. Nun möchte ich dieses Javascript aber erweitern, denn es soll im Frame "content" der Anker mit dem Namen xxx (wird als Variable "ziel" übergeben) eine andere Class bekommen.

    Hier der Code:

    ...

    Verstehst du diesen?
    Wenn ja, dann dürfte es dir möglich sein, diesen entsprechend zu erweitern, wenn du dir dazu "Zugriff auf verschachtelte Fensterobjekte" anschaust.

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Tut mir Leid, aber leider ist Javascript Neuland für mich. Ich will mich demnächst einlesen, jedoch brauch ich diese Funktion sehr schnell. Wäre also sehr dankbar, wenn man mir helfen könnte. Ich habe selbst rumprobiert - leider klappt es nicht:

      function aktivieren(sender,ziel)  {

      // referenz auf das root element des menus
        var menuRoot = document.getElementById('nav');
        var ankerRoot = content.document;

      // von dort aus alle <a>
        var alleAElemente = menuRoot.getElementsByTagName('a');
        var alleAnker = ankerRoot.anchors;

      // Jetzt durch alle <a> rauschen
        for(var i = 0; i < alleAElemente.length; i++)
        {
           // setze alle ausser dem Element, das die Funktion gestartet hat auf 'normal'
           alleAElemente[i].className = alleAElemente[i] != sender ? 'normal' : 'aktiv';
        }
        return true;

      // Jetzt durch alle <anker> rauschen
        for(var i = 0; i < alleAnker.length; i++)
        {
           // setze alle ausser dem Element, das die Funktion gestartet hat auf 'normal'
           alleAnker[i].className = alleAnker[i].name != ziel ? 'normal' : 'aktiv';
        }
        return true;
      }

      1. Hallo Andreas

        Ich habe selbst rumprobiert - leider klappt es nicht:

        Das sieht doch schon fast funktionsfähig aus.

        »» function aktivieren(sender,ziel)  {  
        
        >   
        >   // referenz auf das root element des menus  
        >   var menuRoot = document.getElementById('nav');  
        >   var ankerRoot = content.document;  
        
        ~~~                     ^^^^^^^  
        Ist das der Name des Frames, in dem die Anker stehen?  
        Hast du mal auf der von mir verlinkten Seite nachgesehen?  
        Du musst sie ja nicht komplett durcharbeiten, was du brachst steht fast am Anfang.  
          
        ~~~javascript
        »»   // von dort aus alle <a>  
        
        >   var alleAElemente = menuRoot.getElementsByTagName('a');  
        >   var alleAnker = ankerRoot.anchors;  
        >   
        >   // Jetzt durch alle <a> rauschen  
        >   for(var i = 0; i < alleAElemente.length; i++)  
        >   {  
        >      // setze alle ausser dem Element, das die Funktion gestartet hat auf 'normal'  
        >      alleAElemente[i].className = alleAElemente[i] != sender ? 'normal' : 'aktiv';  
        >   }  
        >   return true;  
        
        ~~~     ^^^^^^  
        Hiermit beendest du die Funktion. Alles, was danach kommt wird nicht mehr ausgeführt.  
          
          
        Auf Wiederlesen  
        Detlef  
        
        -- 
        - Wissen ist gut  
        - Können ist besser  
          
        - aber das Beste und Interessanteste ist der Weg dahin!