Avatar billede w13 Novice
11. august 2007 - 18:23 Der er 1 kommentar og
1 løsning

Selection og Range i IE

Hej Eksperter.

Jeg er i gang med at lave en teksteditor i JavaScript og har fundet lidt kode til at indsætte en Node, hvor man har markeret teksten.

Koden er:
-----------------------------------------------------
function insertNodeAtSelection(win,insertNode){
    if(ie){
        var sel=win.document.selection;
        var range=sel.selectionStart;
    }else{
        var sel=win.getSelection();
        var range=sel.getRangeAt(0);
    }
    sel.removeAllRanges();
    range.deleteContents();

    var container=range.startContainer;
    var pos=range.startOffset;
    range=document.createRange();

    if (container.nodeType==3&&insertNode.nodeType==3) {
        container.insertData(pos, insertNode.nodeValue);
        range.setEnd(container, pos+insertNode.length);
        range.setStart(container, pos+insertNode.length);
    } else {
            var afterNode;
            if (container.nodeType==3) {
            var textNode = container;
            container = textNode.parentNode;
            var text = textNode.nodeValue;
            var textBefore = text.substr(0,pos);
            var textAfter = text.substr(pos);
            var beforeNode = document.createTextNode(textBefore);
            afterNode = document.createTextNode(textAfter);
            container.insertBefore(afterNode, textNode);
            container.insertBefore(insertNode, afterNode);
            container.insertBefore(beforeNode, insertNode);
            container.removeChild(textNode);
        } else {
            afterNode = container.childNodes[pos];
            container.insertBefore(insertNode, afterNode);
        }
        range.setEnd(afterNode, 0);
        range.setStart(afterNode, 0);
    }
    sel.addRange(range);
}
-----------------------------------------------------
Dette virker fint i Firefox. I IE får jeg fejlen "Objektet understøtter ikke denne egenskab eller metode". Fejlmeddelelsen henviser til:
    sel.removeAllRanges();
    range.deleteContents();

Variablen "win" indeholder i øvrigt "document.getElementById("wysiwyg").contentWindow" og "insertNode" indeholder table-elementet, som skal oprettes. Dette element kan i øvrigt sagtens oprettes, når jeg bare bruger appendChild, og altså ikke noget med selection.

Håber I kan hjælpe!
Avatar billede w13 Novice
12. august 2007 - 16:15 #1
if(ie){
        var sel=win.document.selection;
        var range=sel.selectionStart;
    }else{
        var sel=win.getSelection();
        var range=sel.getRangeAt(0);
    }

er nu rettet til:

    var sel;
    var range;
    if(window.getSelection){
        sel=window.getSelection();
        range=sel.getRangeAt(0);
    }else if(document.selection){
        sel=document.selection;
        range=sel.createRange()
        text=range.text;
    alert(text.htmlText);
    }else if(document.getSelection){
        sel=document.getSelection();
    }

Den første if-betingelse fungerer i FF, den anden i IE.

Det lader til, jeg får fejl i IE omkring:

    sel.removeAllRanges();
    range.deleteContents();

selvom Range kommer til at indeholde den markerede tekst.

Alt virker dog i FF!
Avatar billede w13 Novice
15. august 2007 - 03:24 #2
Lukker. Prøver helt forfra.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester