Javascript: Thema: replace HTML

Hi,

ich möchte auf meiner Seite durch (ja :p ) javascript HTML-Tags austauschen lassen. Jetzt habe ich mir einen Code zusammen geschrieben, dieser erfüllt aber nur zur hälfte seine Arbeit (der Html Tag „p“ soll ausgetauscht werden in […]):

var source;
source = document.body.innerHTML;
source = source.replace(/<p>/g, ' <textarea>' );
document.body.innerHTML = source2;

Hier macht er es auch, so wie man es Ihm sagt:
Ersetze

durch .

Wenn ich jetzt den Code erweitere um den End-Tag ("") führt er nicht mehr das Script aus:

Hier ist ein Fehler drinnen. Ich habe alles schon durch probiert, der HTML-Tag „

“ durch „</p>“ und einiges mehr. Über google finde ich leider auch nichts richtiges.

Vielleicht findet jemand von euch eine Lösung.

mfg 99shi

var source; source = document.body.innerHTML; source = source.replace(/<p>/g, ' <textarea>' ); source = source.replace(/<\/p>/g, ' </textarea>' ); document.body.innerHTML = source;
sollte funktionieren.
"/" werden escaped und beim zweiten fehlte der slash.

Danke.
Jetzt wird mehr ausgegeben. Aber so wie es nicht sollte:

Jetzt gibt er folgendes aus:

<textarea> </textarea> [..] Den Text [...] <textarea> </textarea>
(Aus dem Quelltext genommen)

Jetzt gibt er 2 Komplette Textare’s aus. Aber er schreibt den Text nicht rein.
Also das macht der nicht:

html validiert?
Bei mir nicht nachvollziehbar: http://hummer.is-a-chef.net/rep.php

ich hab es mal auf einer neuen Seite ausprobiert. Hier der Code:

[code]

blabla test

haha

[/code] Er gibt mir nur die beiden "p" Tags aus ohne die Textarea's, so als würde der Code nicht existieren.

Beim validieren gibt er mir aus, das im Script ein Fehler ist

[quote]source = source.replace(/</p>/g, ‘’ );
The Validator found an end tag for the above element, but that element is not currently open. This is often caused by a leftover end tag from an element that was removed during editing, or by an implicitly closed element (if you have an error related to an element being used where it is not allowed, this is almost certainly the case). In the latter case this error will disappear as soon as you fix the original problem. [/quote]
Was aber so gesehen ja keins ist, da dieses im Javascript liegt und so gewollt ist.

[quote]Er gibt mir nur die beiden “p” Tags aus ohne die Textarea’s, so als würde der Code nicht existieren.
[/quote]
Diese existieren auch nicht zu der Zeit, wenn das Skript ausgeführt wird.

Ich meine ja, formal hat der Validator da zumindest bei einem HTML4-Dokument unrecht, weil
die Spezifikation sagt, daß script CDATA enthält. Hat den Validator also nicht zu kümmern, was
da drinsteht.
Praktisch ist es aber wohl so, daß browser damit Probleme haben, weswegen man bei XHTML
den Inhalt auch als PCDATA angegeben hat, man den Kram also nicht unmaskiert dort
reinschreiben darf.
Kurzum, man kommentiert in der Praxis für HTML den Inhalt von script und style einfach aus

In XHTML maskiert man kritische Zeichen oder kennzeichnet den Inhalt meist als CDATA und
kommentiert aus oder lagert den Kram gleich in eine externe Datei aus - was die Universallösung
für beide Sprachvarianten ist.

Ansonsten interessiert den Validator die Skriptausführung auch nicht, weil sie inhaltlich irrelevant
ist. Den kümmert nur, was wirklich als Inhalt vorhanden ist. Von daher ist es für den auch
belanglos, ob man in einer inhaltlich ziemlich sinnlosen Skriptaktion ein spezifisches
Blockelement wie p gegen ein inzeilige Formularelement wie textarea austauscht.

Ich hab den Fehler bei mir gefunden. (siehe alter Quelltext; voriger Post). Dort stand
source = source.replace(/ /g, ‚‘ );
und das ist natürlich falsch (Tippfehler) :ps:

Jetzt geht es wieder.
Jetzt gibt es ein weiteres Problem. In diesem

Tag ist nun ein „H1“ eingefügt. Hier macht er vor dem „

“-Tag und hinter dem „

“-Tag jeweils ein Textfeld, weil ein „h1“-Tag enthalten ist.

[code]

Überschrift


Text blablabla… [/code] Daraus wird: [code]

Überschrift

Text blablabla.... [/code] Weiß jemand warum das Script es macht?

Weil Überschrift-Elemente nichts in Absatz-Elementen zu suchen haben.

:hail:

vergessen … danke :slight_smile:*
Ich habe es jetzt in einen anderen DIV gepackt und jetzt passt alles.

Hier der Code der funktioniert:

[quote]var sourceyBoard ;
sourceyBoard = document.body.innerHTML;
sourceyBoard = sourceyBoard .replace(/

/g, ‚
‘ );
sourceyBoard = sourceyBoard .replace(/</div>/g, ‚</div>‘ );
document.body.innerHTML = sourceyBoard ;[/quote]

Danke noch mal für die ganzen Mühen. Zum Schluss geht alles :wink:*

mfg 99shi

divs genauso wenig…

doch: de.selfhtml.org/html/referenz/elemente.htm#h1_h6

Ich bin aber nicht so ein Freund davon, mit JS manuell im Code rumzupfuschen. Ich würd das eher mit Objekten machen.

Wie dem auch sei, vielleicht hilft dir dieses jQuery-Plugin weiter: plugins.jquery.com/project/Editable

nein :wink:

[quote]h1-h6
Darf innerhalb der folgenden HTML-Elemente vorkommen:
[…]div[…][/quote]
So steht es da. Man könnte sich jetzt natürlich noch mal die Spezifikation vom W3C angucken, aber dazu hab ich grad keine Lust.

Es ging darum, dass div- bzw. h-Elemente nichts in p-Elementen verloren haben.

Ach so. Dann hab ich nichts gesagt. Außer das mit dem jQuery.