Akela: Alternative zu innerHTML

Hi,

ich lese mit

document.getElementById('B_CONTENT').getElementById('_B_CONTENT').innerHTML

den Inhalt eines Absatzes aus einem iframe. Leider kodiert innerHTML die Tags um, sodaß ich alle Formatierungen verliere. Ich habe es auch schon mit .textContent versucht aber der wiederum bringt mir nur den reinen Text, ganz ohne Tags.

Mit
document.getElementById('B_CONTENT').getElementById('_B_CONTENT').firstChild.nodeValue
bekomme ich gar nichts zurück.

Ich brauche also ein Attribut oder eine Funktion, die mir den unverfälschten Inhalt zurückliefert. Gibt es das ?

ciao Andreas

  1. Hallo Andreas!

    document.getElementById('B_CONTENT').getElementById('_B_CONTENT').innerHTML

    Dies solltest du nur tun, wenn dir die Netscape User egal sind.
    Dann allerdings kannst du etentuell mit regular expressions eine "Zurückformatierung" vornehmen...

    .textContent

    Liefert den Textinhalt zurück...

    Mit
    document.getElementById('B_CONTENT').getElementById('_B_CONTENT').firstChild.nodeValue

    erhältst du wie spezifiziert den Wert:
    Speichert den Wert oder Inhalt eines Knotens. Bei Textknoten ist dies der Text, bei Attributknoten der zugewiesene Attributwert. Bei Elementknoten hat diese Eigenschaft den Wert null.

    Gibt es eine Alternative?
    Meines Wissens nicht, aber was hast du denn vor? Vielleicht hilft die ja cloneNode oder das suchen innerhalb des DOM trees weiter...

    Greets,
    Richard

    1. Hallo Richard,

      Danke für die Antwort.

      Was habe ich vor ?

      *** Definition:
      Hauptseite -> Seite, in der gearbeitet wird. Diese wird nur einmal aufgerufen. Alles weitere passiert dann per JavaScript

      Parameterseite -> Das ist eine ganz normale Seite, die ein paar Überschriften und Absätze enthält, die per ID eindeutig bezeichnet sind.

      *** Vorgang:
      In die Hauptseite lade ich per iframe die Parameterseite. Von der Hautpseite aus lese ich jetzt per JavaScript verschiedene Parameter aus dem iFrame. Hierfür greife ich auf die IDs zu.
      Es gibt auch diesen einen Absatz, der Formatierungen enthält, die leider nicht erhalten bleiben :(

      Kann ich statt des P-Tags etwas anderes verwenden (z.B. div o.ä) um den uverfälschten HTML-Block auslesen zu können ?

      ciao Andreas

      1. Hallo Andreas!

        Kann ich statt des P-Tags etwas anderes verwenden (z.B. div o.ä) um den uverfälschten HTML-Block auslesen zu können ?

        Es gibt also, wenn ich dich richtig verstehe, einen Absatz der Art:
        <p id="problemfall"> irgendein text <beispielsubknoten>noch was</beispielsubknoten></p>

        1. Generelle Antwort: natürlich kannst du überall, wo du <p> verwendest auch <div> verwenden... ob das dein Problem löst, weiss ich nicht.

        Du sprichst von Formatierung, die aufgelöst wird. Welche Art von Fromatierung meinst du? CSS? Oder mittels Tabelle(generell nicht zu bevorzugen)? Oder gar mittels nbsp; (Wie unschön...)? Oder Sonderzeichen?

        Was soll denn mit dem ausgelesenen Inhalt des <p id="problemfall"> gemacht werden? Willst du ihn (String-)parsen und wieder zurückschreiben?

        2. Generelle Antwort: Der DOM Zugriff ist zu bevorzugen.
        Willst du z.B. den Inhalt von <beispielknoten>, dann erhältsts du Mittels: alert(document.getElementById("problemfall").getElementsByTagName("beispielknoten").firstChild.data)
        die Ausgabe "noch was" in der Alertbox.

        Greets,
        Richard

        Greets,
        Richard

        1. Hallo Richard,

          zu 1.
          Ja, Deine Vermutung stimmt, es sieht z.B. so aus
          <p id="_CONTENT">Das ist eine <em>demo</em> mit einer <strong>Fettschrift</strong></p>

          Diesen Inhalt will ich aus dem iframe herauslesen und in mein Hauptdokument einfügen. Der cloneNode hört sich ganz gut an, den werde ich mal versuchen. Laut SelfHTML geht der aber erst mit JS1.5, was mir u.U. Probleme mit Organizern bringen könnte.
          Ich habe vorhin auch den Fehler gemacht:
          obj1.nodeValue  = obj2.innerHTML
          wenn ich jetzt den nodeValue durch innerHTML ersetze geht es
          obj1.innerHTML = obj2.innerHTML
          Zitat -> Vor lauter Bäumen .... :-)

          Aber das hat dann, wie Du bereits erwähntest, den Ausschluß anderer Browser zur Folge, weswegen ich immer noch nach einer besseren Lösung suche.

          zu 2.
          Dann müsste ich aber alle Teileobjekte wieder zu meinem Text zusammensetzen. Das möchte ich natürlich nicht :)

          Wenn Dir zu 1. etwas einfällt würde ich mich Danke für die Unterstützung

          ciao Andreas

    2. Hi,

      document.getElementById('B_CONTENT').getElementById('_B_CONTENT').innerHTML
      Dies solltest du nur tun, wenn dir die Netscape User egal sind.

      ? "Netscape" unterstützt auch kein getElement... - kommt also erst gar nicht zu innerHTML.

      Falls Du die Netscapes >=6 mit Mozilla-Engine meinst: Die Mozilla-Engine unterstützt, wie alle anderen DOM-Browser auch, ebenfalls innerHTML. Es wird also *niemand* "ausgeschlossen".

      .textContent
      Liefert den Textinhalt zurück...

      Das wiederum, kommt auf den Browser an.

      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 Akela.

    document.getElementById('B_CONTENT').getElementById('_B_CONTENT').innerHTML

    den Inhalt eines Absatzes aus einem iframe. Leider kodiert innerHTML die Tags um, sodaß ich alle Formatierungen verliere.

    Was für Formatierungen? Ich dachte es geht um das Auslesen von HyperText_Markup_Language–Elementen?

    Ich brauche also ein Attribut oder eine Funktion, die mir den unverfälschten Inhalt zurückliefert. Gibt es das ?

    Eine Browsersuche ([Strg]+[F]) auf der Forumshauptseite hätte dir diesen Thread und im Verlauf dessen meine Frage offenbart.

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hallo Mathias,

      ich habe mir Deine Links angesehen, konnte daraus aber für mich keine Lösung ziehen.

      Ich möchte alles, was innerhalb eines Tag-Containers steht 1:1 in einen anderen Tag-Container kopieren. Dabei sollen beinhaltete Tags nicht umgewandelt werden. D.h.
      aus <b> soll nicht &lt;b&gt; werden ! Leider tritt dieser Effekt bei mir auf, wenn ich mit innerHTML den Inhalt aus meinem <P>-Container ziehe.

      Es wäre mir wichtig, eine Lösung zu finden, die auf möglichst vielen Browsern funktioniert. Somit finde ich innerHTML auch immer unsympatischer.

      ciao Andreas

      1. Hallo Akela.

        Ich möchte alles, was innerhalb eines Tag-Containers steht 1:1 in einen anderen Tag-Container kopieren.

        OK, stimmt. Hierfür brauchst du keine Serialisierung. Alles was du brauchst, sind http://de.selfhtml.org/javascript/objekte/node.htm#clone_node@title=cloneNode und http://de.selfhtml.org/javascript/objekte/node.htm#append_child@title=appendChild bzw. http://de.selfhtml.org/javascript/objekte/node.htm#insert_before@title=insertBefore.

        Einen schönen Freitag noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]