Frank: id im JavaScript dynamisch auswählen

Hi,
ich hab folgendes Problem

kann ich in folgendem Javascript-Text

"document.all.idname.innerHTML = ..."

die Stelle "idname" dynamisch verändern ??
Oder kann man id s auf einer seite mit index versehen ??

Is vielleicht nich besonders gut erklärt aber vielleicht weiß ja jemand was ich meine.

Danke Frank

P.S. schaut euch mal www.BundyFan.de an

  1. Hi Du,

    kann ich in folgendem Javascript-Text

    "document.all.idname.innerHTML = ..."

    die Stelle "idname" dynamisch verändern ??

    Einfachste und ziemlich universelle, wenn auch nicht in jedem Fall optimale aber für Deine Frage passende Lösung:

    objName = 'foo'; // z.B. halt
      eval('document.all.' + objName + '.innerHTML = "hallo"');

    Oder kann man id s auf einer seite mit index versehen ??

    Da wäre es geschickter zu wissen, was es denn für eine Element ist...

    Mirko

    1. DANKE

      eval('document.all.' + objName + '.innerHTML = "hallo"');

      diese methode funktioniert.
      Ich bin begeistert.

      ff

  2. gruss Frank,

    kann ich in folgendem Javascript-Text
    "document.all.idname.innerHTML = ..."
    die Stelle "idname" dynamisch verändern ??

    meinst Du so etwas wie eine parameteruebergabe
       bei funktionen ? antwort="ja" : antwort="nein"

    Oder kann man id s auf einer seite mit index versehen ??

    indizes benoetigst Du nicht unbedingt, denn Du benennst
       doch Deine divsbzw Deine layer - oder?

    Is vielleicht nich besonders gut erklärt aber vielleicht

    weiß ja jemand was ich meine.

    hilft das hier weiter?:

    function manageDiv(divName,text)
     {if (document.getElementById)
      {document.getElementById(divName).innerHTML = text;}
      else
      {if (document.all)
       {document.all.tags("div")[divName].innerHTML = text;}
       if (document.layers)
       {document.layers[divName].document.open();
        document.layers[divName].document.write(text);
        document.layers[divName].document.close();
     } } }

    ausserdem koenntest Du noch mit der methode "eval()" arbeiten
       dann saehe das ganze fuer (document.layers/all) so aus:

    function manageDiv(divName,text)
     {if (document.all)
      {eval("document.all."+divName+".innerHTML = "+text);}
      if (document.layers)
      {eval("document."+divName+".document.open()");
       eval("document."+divName+".document.write("+text+")");
       eval("document."+divName+".document.close()");
     } }

    alles klar? - by(t)e by(t)e - peterS. - pseliger@gmx.net

    1. Hi peterS

      indizes benoetigst Du nicht unbedingt, denn Du benennst
         doch Deine divsbzw Deine layer - oder?

      Von Layern war ja gar nicht die Rede, oder? Auch andere Elemente haben die Eigenschaft innerHTML.

      function manageDiv(divName,text)
      {if (document.getElementById)
        {document.getElementById(divName).innerHTML = text;}
        else
        {if (document.all)
         {document.all.tags("div")[divName].innerHTML = text;}
         if (document.layers)
         {document.layers[divName].document.open();
          document.layers[divName].document.write(text);
          document.layers[divName].document.close();
      } } }

      Hmm.. ist aber eher unperformant. Da wird ja bei jedem Aufruf neu gecheckt, welches Objekt der Browser nun kennt. Meine Wenigkeit macht das immer so:

      if (document.layers) setText = function setText(name, txt) // writes text into a stylesheet
      { document.layers[name].document.open();
        document.layers[name].document.write(txt);
        document.layers[name].document.close();}
      else if (document.all) setText = function setText(name, txt)
      { document.all.tags("div")[name].innerHTML = txt;}
      else if (document.getElementById) setText = function setText(name, txt)
      { document.getElementById(name).innerHTML = txt;}
      else setText = function setText() {};

      Da wird die Funktion einmal am Anfang zugewiesen und fertig ist die Laube :).

      ausserdem koenntest Du noch mit der methode "eval()" arbeiten
         dann saehe das ganze fuer (document.layers/all) so aus:

      Also, wenn man schon weiß, dass es Layer sind, warum dann so unperformant mit eval arbeiten?

      Mirko

      1. gruss Mirko,

        >> Von Layern war ja gar nicht die Rede, oder? Auch andere
          >> Elemente haben die Eigenschaft innerHTML.

        richtig - deswegen hatte ich die funktion meines schnell
          zusammengeschusterten beispiels ja auch erst "manageElement()"
          genannt - aber da ich glaube, das es dem fragesteller wirklich
          nur um layer/divs ging und es mir wiederum nur darauf ankam,
          diesem die unterschiedlichen zugriffsweisen zu veranschaulichen
          blieb der code halt primitiv oder *g* >>aber eher unperformant<<

        *g* entschuldige bitte *g*

        und trotzdem ist im bsp. alles enthalten, was der nutzer spaeter
          fuer sich nutzen, abwandeln, und tunen kann:

        bsp.: document.all.tags("div")[divName].innerHTML

        wenn mein fragesteller spielfreude an den tag legt,
          nimmt er sich diese stelle vor ".tags('div')" und
          spielt damit; wenn nicht, waere jeder getunte code
          nicht den aufwand wert gewesen;

        - by(t)e by(t)e - peterS.