Koki_87: Position einer Selektion Herausfinden im IE

Beitrag lesen

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);  
    }  
}