var rrange = window.getSelection ();
var startnode = rrange.anchorNode;
if (startnode == document.getElementById("Blatt"))
{alert ("im Blatt");}
else
{alert("anderswo");};
Wenn die Markierung innerhalb von Blatt ist, dann enthält anchorNode den , welcher Kind von <div id="Blatt"></div> ist.
var start = rrange.anchorOffset;
alert(start);
var endnode = rrange.focusNode;
var ende = rrange.focusOffset;
var insText = rrange.toString.substring(start, ende);
Hier fehlen die () zum Aufruf der toString-Funktion.
document.getElementById("Blatt").firstChild.replaceData(start, (ende-start), (aTag + insText + eTag));
Hier nutzt du ja auch ausschließlich den einen Textknoten.
Das ganze wird übrigens nicht funktionieren, wenn Blatt etwas anderes als bloß einen Textknoten enthält oder die Markierung darüber hinaus geht. Daher wie gesagt: Entweder es reicht eine Textarea, dann sparst du dir viel Gefummel mit der Selection-API (IE ausgenommen). Oder du willst wirkliches WYSIWYG, dann müsstest du davon ausgehen, dass Markierungen knotenübergreifend sein können und execCommand verwenden.
/* Anpassen der Cursorposition */
var pos;
if (insText.length == 0) {
pos = start + aTag.length;
} else {
pos = start + aTag.length + insText.length + eTag.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
Das wird nicht funktionieren, du arbeitest nicht mit einem input-Element.
Mathias