Stefan: innerHTML für verschiedene Browser

Hallo,

also ich habe nix gescheites dazu gefunden wie ich am besten eine Funktion schreibe die innerHTML für alle Browser richtig verwendet.

Bei der style Eigenschaft habe ich das so gemacht:
-->
function getElementStyle(Welches){
 if (document.getElementById){ //DOM
  var ElementStyle=document.getElementById(Welches).style;
 }
 else{
  if (document.layers){ //NS4
   var ElementStyle=document.Welches;
  }
  else{ //IE4
   var ElementStyle=document.all.Welches.style;
  }
 }
 return ElementStyle;
}
function IrgendEine(){
ElementStyle=getElementStyle('FeldId');
ElementStyle.visibility = 'visible';
}
<--

Ist das gut so?

Nun würde mich interessieren wie die Funktion getElementStyle() zu getElement() umgeschrieben werden müsste, dass ich wie folgt schreiben kann:
-->
Element=getElement('FeldId');
Element.innerHTML = '<b>Der Text</b>';
<--

Danke
Stefan

  1. Hallo Stefan,

    das ist jetzt keine Antwort auf Deine Frage, aber warum willst Du noch Browser der "4. Generation" berücksichtigen? Bleihaltiges Benzin gibt es doch heute auch nicht mehr. Wer heute noch mit einem Nescape 4.x oder IE 4.x surft, weiß was er tut und ist auf Einschränkungen eingestellt. Frag einfach ab, ob der Browser des Besuchers DOM (und evtl. innerHTML) unterstützt und wenn nicht, behandle ihn wie einen Besucher ohne Javascript. So weit ich weiß, unterstützen alle DOM-fähigen Browser auch innerHTML. Die Experten mögen mich hier korrigieren.

    Gruß, Jürgen

    1. Hallo,

      So weit ich weiß, unterstützen alle DOM-fähigen Browser auch innerHTML. Die Experten mögen mich hier korrigieren.

      Ich hatte mal den Fall, dass Firefox 1.0 eben nicht richtig mit innerHTML klar kam (im Gegensatz zu Firefox 1.5). Deshalb, und weil ich mitbekommen habe, dass „innerHTML“ eben NICHT zum DOM gehört, habe ich das dann auch lieber mit http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement() gemacht.

      mfg. Daniel

      1. Hi,

        Ich hatte mal den Fall, dass Firefox 1.0 eben nicht richtig mit innerHTML klar kam (im Gegensatz zu Firefox 1.5). Deshalb, und weil ich mitbekommen habe, dass „innerHTML“ eben NICHT zum DOM gehört, habe ich das dann auch lieber mit http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement() gemacht.

        Daß der FF 1 irgendwelche Probleme mit innerHTML gehabt hätte, wäre mir neu. Ist das reproduzierbar?

        Ansonsten: Jeder DOM-Browser unterstützt innerHTML - und wenn das ein neuer Browser nicht täte, käme das wohl sofort auf die Bugliste. ;)

        BTW: Du weißt, daß der IE durchaus Probleme mit createElement() haben kann?! >;->

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. BTW: Du weißt, daß der IE durchaus Probleme mit createElement() haben kann?!

          Hmm, wie sollte denn meine anfangs genannte Prüffunktion am besten aussehen?

          Danke
          Stefan

          1. Hi,

            Hmm, wie sollte denn meine anfangs genannte Prüffunktion am besten aussehen?

            Was genau?

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        2. Hallo,

          Ich hatte mal den Fall, dass Firefox 1.0 eben nicht richtig mit innerHTML klar kam (im Gegensatz zu Firefox 1.5). Deshalb, und weil ich mitbekommen habe, dass „innerHTML“ eben NICHT zum DOM gehört, habe ich das dann auch lieber mit http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement() gemacht.

          Daß der FF 1 irgendwelche Probleme mit innerHTML gehabt hätte, wäre mir neu.

          Weiß nicht. Das SELFHTML-Beispiel funktioniert. KA, warum das bei mir nicht ging. createElement() machte dagegen keine Probleme.

          Ist das reproduzierbar?

          Ich hatte das schon alles umgeschrieben. Habe jetzt keine Lust mehr, das wieder zu ändern :-(
          Jendenfalls ging es - in Gegensatz zu createElement() nicht.

          Ansonsten: Jeder DOM-Browser unterstützt innerHTML - und wenn das ein neuer Browser nicht täte, käme das wohl sofort auf die Bugliste. ;)

          Solange innerHTML nicht zum DOM gehört (und das wird wahrscheinlich auch nie passieren), lasse ich lieber die Finger davon.

          BTW: Du weißt, daß der IE durchaus Probleme mit createElement() haben kann?! >;->

          nein. Welcher denn?

          mfg. Daniel

      2. Ich hatte mal den Fall, dass Firefox 1.0 eben nicht richtig mit innerHTML klar kam (im Gegensatz zu Firefox 1.5). Deshalb, und weil ich mitbekommen habe, dass „innerHTML“ eben NICHT zum DOM gehört, habe ich das dann auch lieber mit http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement() gemacht.

        Hmm, danke für den Tip, aber ist das dann nicht sehr umständlich wenn ich das Selfhtml Bsp hernehme den Text "<h1>Eine sehr dynamische Seite</h1>" zu "<h2>Ist sie wirklich</h2>" umzuändern?

        Bei innerhtml muss ich das ja quasi einfach überschreiben.

        1. Hallo,

          Ich hatte mal den Fall, dass Firefox 1.0 eben nicht richtig mit innerHTML klar kam (im Gegensatz zu Firefox 1.5). Deshalb, und weil ich mitbekommen habe, dass „innerHTML“ eben NICHT zum DOM gehört, habe ich das dann auch lieber mit http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement() gemacht.

          Hmm, danke für den Tip, aber ist das dann nicht sehr umständlich wenn ich das Selfhtml Bsp hernehme den Text "<h1>Eine sehr dynamische Seite</h1>" zu "<h2>Ist sie wirklich</h2>" umzuändern?

          Gegenfrage:
          Warum willst du eine <h1> unbedingt in eine <h2> umwandeln? Ändere doch lieber nur ihren Text. Das geht einfach mit Element.firstChild.nodeValue = "neuer Text".

          Bei innerhtml muss ich das ja quasi einfach überschreiben.

          Mag sein, dass es etwas einfacher ist. Aber createElement() ist nunmal die sauberere Lösung. Du musst dann auch nicht immer den gesamten Quelltext notieren.
          Erstelle dir einfach eine Funktion, der du dann die entspr. Parameter übergibst.

          mfg. Daniel

    2. das ist jetzt keine Antwort auf Deine Frage, aber warum willst Du noch Browser der "4. Generation" berücksichtigen? Bleihaltiges Benzin gibt es doch heute auch nicht mehr. Wer heute noch mit einem Nescape 4.x oder IE 4.x surft, weiß was er tut und ist auf Einschränkungen eingestellt. Frag einfach ab, ob der Browser des Besuchers DOM (und evtl. innerHTML) unterstützt und wenn nicht, behandle ihn wie einen Besucher ohne Javascript. So weit ich weiß, unterstützen alle DOM-fähigen Browser auch innerHTML. Die Experten mögen mich hier korrigieren.

      Interessant... wenn ich dich richtig verstehe, dann würdest du vorschlagen, dass ich dann am Anfang der Funktion die alles initiiert einfach schreibe:

      if (!document.getElementById) return true;

      und weitere Prüfungen weglasse?

      Danke
      Stolzi

      1. Hi,

        Interessant... wenn ich dich richtig verstehe, dann würdest du vorschlagen, dass ich dann am Anfang der Funktion die alles initiiert einfach schreibe:
        if (!document.getElementById) return true;
        und weitere Prüfungen weglasse?

        Na ja, getElementById würde ich, wenn schon "ein Test für alles", nicht verwenden - eher getElementsByTagName.

        Wer sicher gehen möchte, der kann natürlich auch testen, ob innerHTML funktioniert - üblicherweise mit typeof().

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. Hallo Stefan,

        ich prüfe inzwischen nur noch auf DOM, aber wenn es wichtige Seiten sind, keine privaten, würde ich auch noch auf innerHTML testen.

        Zur Verwendung von innerHTML: bei einfachen Sachen, wie formatierten Texten (hx, br etc.) setze ich es lieber ein, als das mit dem "DOM-Geraffel" zu machen. Bei komplizierteren Konstrukten, wie z.B. ganzen Tabellen setze ich lieber auf DOM. Außerdem sollen die DOM-Methoden schneller sein als innerHTML.

        Gruß, Jürgen

  2. Hallo,

    also ich habe nix gescheites dazu gefunden wie ich am besten eine Funktion schreibe die innerHTML für alle Browser richtig verwendet.

    Auch wenn viele Browser „innerHTML“ unterstützen - man sollte es möglichst meiden, da es nicht zum DOM gehört.

    Bei der style Eigenschaft habe ich das so gemacht:


    else{
      if (document.layers){ //NS4
       var ElementStyle=document.Welches;
      }
      else{ //IE4
       var ElementStyle=document.all.Welches.style;
      }

    Ist das gut so?

    Ich würde NS/IE4 nicht mehr unterstützen. Das macht 1. unnötig viel Quellcode und 2. schränkt man sich damit unnötig ein.

    Ich würde nur noch das DOM verwenden.

    Nun würde mich interessieren wie die Funktion getElementStyle() zu getElement() umgeschrieben werden müsste, dass ich wie folgt schreiben kann:
    -->
    Element=getElement('FeldId');
    Element.innerHTML = '<b>Der Text</b>';
    <--

    Verwende lieber http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=createElement()

    mfg. Daniel

    1. hi,

      Auch wenn viele Browser „innerHTML“ unterstützen - man sollte es möglichst meiden, da es nicht zum DOM gehört.

      Analog wäre die Begründung, warum man auch das für AJAX benötigte XMLHTTPRequest-Objekt nicht nutzen sollte - weil es zu keinem frei definierten Standard gehört.

      Wie gut diese Begründung ist, sollte damit klar sein.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Hallo,

      Auch wenn viele Browser „innerHTML“ unterstützen - man sollte es möglichst meiden, da es nicht zum DOM gehört.

      LOL. Super Begründung.

      Du weißt anscheinend nicht, wieviel in JavaScript nur bloße Konvention ist. Es ist weder möglich, noch sinnvoll, pure DOM-Standards zu verwenden. Es gibt kein JavaScript, das nur mit Standards operiert. Selbst das oberste window-Objekt ist nicht standardisiert.

      Mit der Einstellung kommt man in JavaScript echt nicht weit. Und garantiert kommt man nie dahin, effiziente und in der realen Welt nützliche Scripte zu schreiben. Erstens deckt die gegenwärtige Standardisierung nicht alles ab, was es gibt und was gefragt ist, und zweitens gibt es immer noch DOM-Standards, die selbst die Vorzeigebrowser nicht unterstützen, einfach weil das DOM auch in verschiedener Hinsicht fehlgeht.

      http://aktuell.de.selfhtml.org/weblog/javascript-standards

      Mathias

      --
      »No nations, no borders.«
      SELFHTML Weblog
  3. Hallo Stefan,

    also ich habe nix gescheites dazu gefunden wie ich am besten eine Funktion schreibe die innerHTML für alle Browser richtig verwendet.

    Vielleicht das Beispiel mit Lauftext per innerHTML, und speziell noch innerHTML für Netscape 4, falls du den Browser unterstützen möchtest.

    Grüsse
    Cyx23