Hallo Jeena,
Danke, das hilft weiter, auch wenn ich dennoch nicht ganz nachvollziehen kann warum das mit & funktioniert.
Naja, innerHTML liefert Dir den Inhalt des Knoten so, wie er im Speicher vorhanden ist. Beim Parsen dekodiert der Browser nun die Zeichenreferenzen (Entites und NCRs) und ­ wird zu einem Unicode-Zeichen mit spezifischem Zeichencode. Wenn Du Dir das dann per innerHTML liefern lässt, dann bekommst Du gerade eine Zeichenkette zurück, die dieses Zeichen enthält, nicht jedoch ­.
Wenn Du dagegen einen Textknoten hast und als Text-Inhalt (!) '&' drin stehen hast und _dann_ per innerHTML darauf zugreifst, dann würde innerHTML im ersten Schritt Dir auch wirklich ein '&' liefern - allerdings hat innerHTML seinen Namen ja durchaus nicht zu Unrecht bekommen, es heißt ja inner_HTML_ und nicht inner_Text_ - d.h. innerHTML liefert Dir immer HTML-Code zurück - und damit muss der Text des Textknotens kodiert werden. Ein & wird daher zu &. Das Zeichen, für das ­ steht, hat jedoch keine besondere Bedeutung in HTML, d.h. es ist für den Browser kein Problem, das unkodiert zurückzugeben, der HTML-Codeausschnitt, den innerHTML zurückgeben würde, würde den identischen Effekt haben wie ein HTML-Codeausschnitt, der ­ enthält - daher ist es unnötig, das Zeichen als ­ zu kodieren und Du erhälst das Zeichen direkt im String.
Ich hab's jetzt nicht ausprobiert, aber ich würde wetten, dass Du bei & auch nur ein '&' und kein '&' zurückbekommen würdest, wenn Du mittels .firstChild.nodeValue auf den Inhalt des Textknotens im <p>-Element zugreifst und nicht über innerHTML.
Viele Grüße,
Christian
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup