also erstmal danke molily, du hast mir sehr geholfen. die genaue Positionierung habe ich dann in Blubber21 Thread's doch noch gefunden ;)
hier nur so wie es in jedem browser funktioniert (einfach Einfügen an einer bestimmten Stelle, nicht ersetzen, ist aber auch nicht so schwer, dies umzusetzen)
function insert_in_iframe(win, insertNode)
{
var selectionText; // selektierter text
var range; // range um das selektierte objekt
var parentElement; // eltern knoten des selektierten objektes
var container; // inhalt des eltern knotens
var positionStart; // anfangspunkt der selektierung
var positionEnd; // endpunkt der selektierung
var text; // text des gesamten elementes, in welcher die selektion ist
var textBefore // inhalt des Textes vor der Selektion
var textAfter // inhalt des Textes nach der Selektion
var beforeNode; // text-knoten, der vor der selektierung kommt
var afterNode; // text-knoten, der hinter der selektierung kommt
// range.pasteHTML(text); // erstezt die selektierte range mit dem neune wert, alles wird xHtml konform geschrieben
if (document.uniqueID) { // abfrage nur nach dem ie, funktion ist nur für diesen vorgesehen, obwohl opera auch einig methoden ausführen könnte
range = win.document.selection.createRange();
parentElement = range.parentElement();
container = range.duplicate(); // erstellen einer 2. textrange, die den gesamten inhalt des eltern elementes hat
container.moveToElementText(parentElement); // bekommen des gesamten parent inhaltes
container.setEndPoint('EndToEnd', range); // bekommen des Textes des aktuellen Knotens bis zum ende der Selektion
positionStart = container.text.length - range.text.length;
positionEnd = positionStart + range.length;
// beginn der formatierung
container = ""; // zurücksetzen des containers auf den gesamten inhalt des knotens, in welcher die selektion ist
container = range.duplicate(); // -||-
container.moveToElementText(parentElement); // -||-
text = container.text;
textBefore = text.substr(0, positionStart);
textAfter = text.substr(positionStart);
beforeNode = document.createTextNode(textBefore);
afterNode = document.createTextNode(textAfter);
var newNode = beforeNode.nodeValue +" "+ insertNode.nodeValue +" "+ afterNode.nodeValue;
parentElement.firstChild.replaceData(0, container.text.length, newNode);
} else if (window.getSelection) { // diese Schleife sollte nur noch für netscape browser (FireFox, GoogleChrome und Safari) sein
selectionText = win.getSelection();
range = selectionText.getRangeAt(0);
container = range.startContainer; // im container ist der gesamt inhalt des knotens, in welcher die selektion enthalten ist
positionStart = range.startOffset; // erhält die genaue position der Cursor stelle in dem container (ist ein integer wert)
// beginn der formatierung
parentElement = container.parentNode;
text = container.nodeValue;
textBefore = text.substr(0, positionStart);
textAfter = text.substr(positionStart); // text nach der selektion mit der selektierung als erstes element
beforeNode = document.createTextNode(textBefore);
afterNode = document.createTextNode(textAfter);
alert(parentElement);
parentElement.insertBefore(afterNode, container); // der neue Knoten, erst vor der selektierung
parentElement.insertBefore(insertNode, afterNode); // jetzt kommt die neue stelle
parentElement.insertBefore(beforeNode, insertNode); // nun kommt der rest des alten elementes
parentElement.removeChild(container); // löschen des alten textknotens
//range.setEnd(afterNode, 0);
//range.setStart(afterNode, 0);
//selectionText.addRange(range);
}
}