2011-12-16 15 views
6

Pracuję nad edytorem WYSIWYGU używając div [contenteditable = true] i chcę ustawić zakres wyboru od przesunięcia X węzła A do przesunięcia Y węzła B. Zrobiłem to dobrze na Firefox i IE9, kod jest:Ustawić zakres wyboru w javascript IE8

var range = document.createRange(); 
range.setStart(selectNode, 0); 
range.setEnd(selectNode, selectNode.textContent.length); 
var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 

Ale w IE8, obiekt zakres jest zupełnie inna, nie ma setStart/setEnd, a obiekt ma wybór spożywczych remove/addRange. Proszę pomóc,

Odpowiedz

4

Spójrz na zadzwoń. Jest to interfejs API/wybór interfejsu przeglądarki. To prawdopodobnie to, czego potrzebujesz.

http://code.google.com/p/rangy/

+3

Rangely-core.js jest skompresowany w 42kb, co może być brane pod uwagę przy projektowaniu. – Roberto

3

miałem podobny problem uznał ten PolyFill co było bardzo przydatne dla mnie, ponieważ nie mogłem korzystać smukły w mojej sytuacji: http://bl.ocks.org/visnup/3456262

Edit: oryginalny link rzeczywiście już martwy. Patrząc wstecz na mój stary kod to wygląda polyfill nigdy się go do kodu uwalnianiu, po prostu poszedł z detekcją funkcji w następujący sposób:

if(window.getSelection || document.selection){ 

następnie na mouseUp:

var range; 
if(window.getSelection){ 
    var selection = window.getSelection(); 
    range = selection.getRangeAt(0); 
} else if(document.selection){ 
    range = document.selection.createRange(); 
    if(!range.surroundContents){ 
     // then give up, feature not fully implemented 
    } 
} 
// now do stuff with range (i.e. the selection) 

... i dlatego użytkownicy IE8 nie są obsługiwani dla tej funkcji.

Jednak wszystko nie jest stracone: istnieje newer (than my original answer) polyfill on Github, który może działać, jeśli musisz obsługiwać IE8. Wygląda zarówno ładnie i kompleksowo.

+1

To rozwiązanie ma skompresowane tylko 800 bajtów i jest kierowane na IE8 na wymaganie. To może być lepsze rozwiązanie w przeciwieństwie do Rangely.js, które jest znacznie cięższe. – Roberto

+0

To działa również na mój urok i uważam, że jest to najlepszy sposób na zrobienie tego. – AsGoodAsItGets

+0

Link nie działa. Czy ktoś może podać nowy link? –