Wenn es jemanden interessiert, hier der Fehler: Die Replace-Funktion der Ampersands (&) muss ZUERST ausgeführt werden, sonst werden auch die &s in den < etc. umgewandelt. Hier der korrekte Code:
function maskiere (s) {
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")
}
Es gibt deshalb keine Maskierfunktion in JavaScript, weil man keine braucht. HTML-Elemente erzeugt man mit DOM-Methoden, Text bleibt dabei Text. Bei innerHTML wird der Text vorher geparsed und ist somit eine Ausnahme.
Gut, dass man in Javascript keine braucht. Warum auch?
Beispiel: Ich hab ein Textfeld, da gibt jemand einen böswilligen Suchbegriff ein, der HTML-Tags enthält. Ich als Gutgläubiger Homepage-Inhaber sage irgendwo ganz naiv: meineDiv.innerHTML = "Suchbegriff: <u>" + keyword + "</u>"; und ZACK steht da der HHTML Code auf meiner Seite, und upps, das wollte ich jar gar nicht.
Bei innerHTML schon, das sagte ich aber und geredet habe ich von DOM-Methoden zur Manipulation von XML/HTML-Dokumenten. Wenn man kein HTML mit innerHTML einfügen will, hat es auch keinen Zweck innerHTML zu benutzen.
Gut wäre gewesen die richtige Funktion dafür zu nennen
innerText
Du must mal nach den Eigenschaften von Elementen suchen, wenn du was machen willst.
Document.all deckt die meisten nicht spezifischen Eigenschaften ab SELFHTML: JavaScript / Objektreferenz / all
@crash: Dann habe ich dich missverstanden weiter oben, nichts für Ungut.
@all: Ja, innerText wäre eine Alternative, ist aber so wie ich weiß nicht gerade überall supported. Das innerHTML hingegen läuft fast überall, aber auch nicht soo hundert prozentig perfekt… Habe jetzt nach googlen eine "Misch"lösung zwischen DOM und innerHTML gefunden, die gut funktioniert (innerHTML alleine ist bei mir eine Variable):
Du hast Recht, das wollte ich. Ich habe mir die Suchergebnisse allerdings inzwischen auch mit DOM-Methoden ausgeben lassen, und die Suchergebnisse schreibe ich in eine Tabelle, und da brauche ich logischerweise HTML, daher die Verwirrung