sunny: Verschachtelte divs in NN4 ansprechen

Beitrag lesen

Hi Peter!

... was grundsaetzlich richtig gedacht ist, leider
   hast Du die namen der layer nicht in hochkommata
   gepackt:

document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["meinbild"].src

Hab ich schon, eigentlich, nur beim Testen dann mal weggegeben und dann versehentlich falsch gepostet.
Versucht hab ich auch document.Content.document.ContentText... aber das klappt ebenfalls nicht. Beim Testen erhalte ich zwar keine Fehlermeldung (auch nicht in der JS-Konsole), aber es funktioniert nicht.

ausserdem wuerde ich in jedem fall das name-attribut
   sowohl in den <div>-tags als auch im <img>-tag setzen;

Hab ich gemacht, alle 3 Layer und das Bild haben das name-attribut.

diese layerspezifischen konstrukte erspart
   man sich bei verwendung folgender funktion:

function getImgObjFromLayer(imgName) {
 var imgObj = null;
 var findImage = function(docImages) {
  for (var i=0; i<docImages.length; i++) {
   if (docImages[i].name == imgName) {
    imgObj = docImages[imgName];
    return true;
    break;
   }
  }
  return false;
 }
 var browseLayers = function(doc) {
  if (findImage(doc.images)) {
   return;
  }
  for (var i=0;i<doc.layers.length;i++) {
   browseLayers(doc.layers[i].document);
  }
 }
 browseLayers(document);
 return imgObj;
}

angewandt koennte das ganze dann so aussehen:

if (document.layers) {
 getImgObjFromLayer("meinbild").src = "xyz.gif";
} else {
 document.images["meinbild"].src = "xyz.gif";
}

Hm, na ja, das sieht interessant aus, aber das jetzt noch in mein Script einzubauen würde wohl etwas umständlich. Ich übergebe nämlich in meiner Funktion bereits die Bildnummer, ich müsste dann noch den Namen mitübergeben etc., weiß nicht ob das so eine gute Idee ist und das Ganze vielleicht doch noch komplizierter macht als es eigentlich sein sollte. Also das Script sieht momentan so aus:

function showimage(imagenumber) {
 window.document.images["truckbild"].src = eval("truckbild_" + imagenumber + ".src");

if ((navigator.appName=="Netscape")&&(parseInt(navigator.appVersion)==4)) {
  if (imagenumber == "1") {
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_2"].src = eval("imagebox_2.src");
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_3"].src = eval("imagebox_3.src");
  }
  else if (imagenumber == "2") {
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_1"].src = eval("imagebox_1.src");
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_3"].src = eval("imagebox_3.src");
  }
  else if (imagenumber == "3") {
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_1"].src = eval("imagebox_1.src");
   document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_2"].src = eval("imagebox_2.src");
  }
  document.layers["Content"].document.layers["ContentText"].document.layers["ImageBox"].document.images["imagebox_" + imagenumber].src = eval("imagebox_" + imagenumber + "_active.src");
 }

Das "eval" könnte ich hier eigentlich rausnehmen denke ich, ich hatte es im OriginalScript gebraucht weil es ansonsten in Mozilla nicht funktionieren wollte. Für NN4 sollte es wohl auch ohne gehen, aber ich habs erstmal dringelassen ...

Ich weiß echt nicht warum das so nicht funktionieren will ... womöglich sollte ich wirklich das Ganze Ding umbauen und Dein Script dazueinbinden wenn es keinen besseren Weg gibt. Oder hast Du noch eine Idee woran es liegen könnte? Verstehs einfach nicht ...

Lg,
sunny