Moin
Was schreibst du in den HTML-Code, wenn du 'Wer da?' \ "Ich bin's & wer bist du?" (das soll ein String sein) nach dem Überfahren mit der Maus (onMouseOver) nach 10 Sekunden (setTimeout) mit document.writeln() ausschreiben willst?
<div onMouseOver="window.setTimeout("document.writeln(\"'wer da?'\"ich bin's & wer bist du?\"\")",10000)"> hier Maus drüber.</div>
so in etwa?
Leider nicht ganz. Mal vom Anfang ausgehen:
'Wer da?' \ "Ich bin's & wer bist du?"
wäre der auszugebende HTML-Code.
Jetzt fällst du aber in die Grube selbst rein, die du ausgegraben hast. ;)
Originaltext, wie er im Browser stehen soll:
'Wer da?' \ "Ich bin's & wer bist du?"
Das muß mit HTML-Entities so geschrieben werden:
'Wer da?' \ "Ich bin's & wer bist du?"
Das &-Zeichen wird IMMER als Entity geschrieben, genauso wie doppelte Anführungszeichen. Alles andere ist ein Fehler, da das "&" ja eine Entity einleitet, aber "& " einfach keine Entity ist: Leerzeichen-Entity gibts nicht, und das Semikolon fehlt. Fehlertolerante Browser erzeugen dann dummerweise das simple Und-Zeichen.
Weiter im Text: Ausgabe in document.write:
document.write("'Wer da?' \ "Ich bin's & wer bist du?"");
Keine doppelten Anführungszeichen im HTML-Text, also keine Escape-Zeichen dafür. Der Backslash muß aber escaped werden.
Und jetzt als setTimeout:
setTimeout('document.write("'Wer da?' \\ "Ich bin's & wer bist du?"");',10000);
Durch die Wahl der einfachen Anführungszeichen als Stringbegrenzer(eine gute Idee, wenn man Javascript in mouseover packt) müssen alle einfachen Anführungszeichen escaped werden, und natürlich die Backslashes.
Und das ganze ins Mouseover:
onmouseover="setTimeout('document.write("'Wer da?' \\ "Ich bin's & wer bist du?"");',10000);"
Da Attributwerte auch mit Entities gepflastert werden müssen, werden die &-Zeichen und die "-Zeichen als Entity geschrieben. Die &-Zeichen von schon bestehenden " und & werden dadurch etwas unkonventionell aussehend irgendwie auch "verdoppelt".
Immerhin ist deine Lösung nur durch die verhunzte ;) erste Umsetzung von String nach HTML falsch. :)
- Sven Rautenberg