Alternative zu innerHTML
Akela
- javascript
0 ritschmanhard0 Akela0 ritschmanhard0 Akela
0 Cybaer
0 Mathias Brodala0 Akela
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
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
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
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
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
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
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
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 <b> 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
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