Thomas Häber: Variablen unter getElementById

Guten Abend,

Habe diesen Script der dynamisch einige Links auf meine Seite lädt. Da das aber auch zu Netscape 6.x usw. kompatibel sein soll, versuche ich den unten aufgeführten dynamischen Eintrag als getElementById zu machen, da ich aber eine Variable dabei habe gibt es einige Probleme um es korrekt ausführen zu lassen.

Zur Probe habe ich (erstmal ohne getElementById) den Script in der optionalen URL noch mal angegeben.

(Ich habe auch mit der Forums-Suche danach gestöbert habe jedoch nur veraltete Links aufspüren können.)

<html><head>
<title>Location auswerten - by Thomas Häber</title>
<script language="JavaScript" type="text/javascript">
<!--
  function Zeugs() {
  var URLInhalt = location.href;

if (window.location.host == true) {
  var Ab_Menu = window.location.pathname;
  }
  else {
  var hq1 = URLInhalt.indexOf("haeber_de/");
  var Ab_Menu = URLInhalt.substring(hq1,999);
  }
  ArrayVariable = Ab_Menu.split("/");

hz = "1";
  while (unescape(ArrayVariable[hz]) != "undefined") {
  hz++;
  }
  hz2 = hz-2;

Adresse = "";
  Verweise = "";
  hq = "1";
  var Vorverweis = "";
  var Zusatz = "<span style='color:#000000;'> - </span>";
  var Verweis1 = "<a id='Navigation' style='color:#000000;font-family:Arial,Verdana;text-decoration:none;' href='";
  var Verweis2 = "'></a>";
  var Punkt = "../";
  var Indexlink = "index.html";

function Dlayer(xx,yy) {
  if (document.getElementById) document.getElementById(xx).innerHTML = yy;
  else if (document.all) document.all.xx.innerHTML = yy;
  else if (document.layer) {
  document.xx.document.open();
  document.xx.document.write(yy);
  document.xx.document.close();
  }
  }

while (unescape(ArrayVariable[hq]) != "undefined") {
  if (hz2 == 0) Adresse = "javascript:location.reload()";
  else {
  Punkt2 = "";
  for (pp = 2; pp <= hz2; pp++) {Punkt2 = Punkt2.concat(Punkt);}
  Adresse = Punkt2.concat(Indexlink);
  hz2--;
  }

Vorverweis  = Verweis1.concat(Adresse);
  Verweis = Vorverweis.concat(Verweis2);
  if (hq == "1") Verweise = Verweise.concat(Verweis);
  else Verweise = Verweise.concat(Zusatz + Verweis);
  Neues = Verweise;

Dlayer("Navdiv",Neues,"ja");
  hq++;
  Vorverweis = "";
  Neues = "";
  }

i = "0";
  hp = "1";
  while (unescape(ArrayVariable[hp]) != "undefined") {
  s = unescape(ArrayVariable[hp]);
  x = s;

if (x == "forum")      x = "Forum";
  if (x == "info")       x = "Information";
  if (x == "extras")     x = "Extras";
  if (x == "menu")       x = "Menu";
  if (x == "gaestebuch") x = "Gästebuch";
  if (x == "spiele")     x = "Spiele";

if (x == "haeber")     x = "Haeber Community";
  if (x == "preview")    x = "Preview";
  if (x == "action")     x = "Action";
  if (x == "denken")     x = "Denken-Logik";
  if (x == "fun")        x = "Fun";
  if (x == "strategie")  x = "Strategie";
  if (x == "gimmicks")   x = "Gimmicks";
  if (x == "links")      x = "Links";

<!-- Genau hier drunter habe ich Probleme mit dem getElementById -->

if (document.getElementById) document.getElementById(Navigation[i]).innerHTML = x;
  else if (document.all) document.all.Navigation[i].innerHTML = x;
  else if (document.layer) {
  document.Navigation[i].document.open();
  document.Navigation[i].document.write(x);
  document.Navigation[i].document.close();
  }

i++;
  hp++;
  }
}
//-->
</script></head>
<body onLoad="Zeugs();return true;">

<div align="center" id="Navdiv" style="color:#000000;"></div>

</body></html>

  1. Hi,

    hier ein Schuss ins Blaue, ungetestet, nur mal, was mir beim Überfliegen auffiel:

    var Verweis1 = "<a id='Navigation' style='color:#000000;font-family:Arial,Verdana;text-decoration:none;' href='";

    Das sorgt ja wohl dafür, dass _mehrere_ Links mit der selben ID erzeugt werden.

    if (document.getElementById) document.getElementById(Navigation[i]).innerHTML = x;

    Und hier versuchst Du quasi, durch mehrere identische IDs durchzuiterieren.

    IDs müssen eindeutig sein, d.h., jede ID darf nur exakt einem Element zugeordnet sein. IMHO ist es nicht vorgesehen, dass der Browser aus mehreren identischen IDs automatisch eine Collection macht (was Du voraussetzt). Du musst statt dessen folgendermaßen vorgehen:

    1. Ermittle die Anzahl Links, die geschrieben werden sollen.
    2. Bau Dir eine Schleife, die bis zur Linkanzahl hochtickert und jedem Link eine eindeutige ID zuweist, z.B. linknummer = "Navigation" & x, und schreib dann jeweils linknummer als ID.
    3. Bei der Abfrage setzt Du nach selbem Prinzip wieder eine ID zusammen und fragst sie ab.
    4. Beachte: Du kannst entweder nach dem String der ID abfragen oder nach einer Variablen - in Deinem Fall müsste das wohl eine Variable sein.

    Ich hoffe, das hilft Dir ein bisschen weiter.

    Grüße,

    Utz

    1. Egal welche Schleife ich auch probiere bzw. welche Variable es auch sein mag, der Browser dankt es mir mit dem Error das getElementById kein Objekt ist. Wenn ich getElementById("Navigation", i) angebe verschont mich der Borwser zwar mit einer Fehlermeldung, jedoch wird nur der Zuletzt generierte Link dargestellt.

      Also wie ged dat nu'?

      1. Egal welche Schleife ich auch probiere bzw. welche Variable es auch sein mag, der Browser dankt es mir mit dem Error das getElementById kein Objekt ist. Wenn ich getElementById

        <!-- Anmerkung: Dieses i wird nämlich nicht beachtet weswegen auch nur "Navigation" gehen würde -->

        ("Navigation", i) angebe verschont mich der Borwser zwar mit einer Fehlermeldung, jedoch wird nur der Zuletzt generierte Link dargestellt.

        Also wie ged dat nu'?

        1. Hallo Thomas,

          Egal welche Schleife ich auch probiere bzw. welche Variable es auch sein mag, der Browser dankt es mir mit dem Error das getElementById kein Objekt ist. Wenn ich getElementById ("Navigation", i) angebe verschont mich der Borwser zwar mit einer Fehlermeldung, jedoch wird nur der Zuletzt generierte Link dargestellt.

          IMHO sitzt der größte Teil Deines Problems viel weiter vorne, wie schon gesagt. Fang damit an dass Du dafür sorgst, dass _jeder_ Link eine _andere_ ID bekommt, denn getElementById macht nur dann Sinn, wenn die ID nur exakt einem Element zugeordnet ist.

          Für den Einstieg solltest Du vielleicht etwas zurückschrauben und zu Studienzwecken die Links nicht dynamisch generieren, sondern einfach platt als HTML reinzuschreiben - daran kannst Du ausprobieren, wie man mit getElementById auf Elemente zugreift und sie anspricht. Als zweiten Schritt - wenn das funzt - kannst Du Dich dann immer noch drüber hermachen, die Links zu generieren.

          Grüße,

          Utz