2011-12-16 14 views
6

Sto lavorando a un editor wysiwyg utilizzando div [contenteditable = true] e voglio impostare un intervallo di selezione dall'offset X del nodo A all'offset Y del nodo B. L'ho fatto bene su Firefox e IE9, il codice è:Imposta intervallo di selezione in 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); 

Ma su IE8, l'oggetto Range è totalmente diverso, non ha setStart/setEnd, e l'oggetto di selezione non ha animali rimuovere/AddRange. Please help,

risposta

4

Dai un'occhiata a rangy. È un'API di selezione/intervallo di browser incrociati. Questo è probabilmente ciò di cui hai bisogno.

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

+3

Rangely-core.js è compresso di 42kb che potrebbe essere una considerazione di progettazione. – Roberto

3

Ho avuto un problema simile pensano che questa polyfill che era molto utile per me, come non ho potuto utilizzare slanciato nella mia situazione: http://bl.ocks.org/visnup/3456262

Edit: link originale ha infatti andato morto. Guardando indietro il mio vecchio codice sembra che la polyfill non ha mai fatto nel codice di rilascio, abbiamo semplicemente andati con rilevamento come di seguito indicato:

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

poi 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) 

... e pertanto gli utenti IE8 non sono supportati per tale funzione.

Tuttavia non tutto è perduto: c'è un newer (than my original answer) polyfill on Github che potrebbe funzionare se devi supportare IE8. Sembra sia piuttosto magro e completo.

+1

Questa soluzione è solo 800 byte compressi e targetizza IE8 per requisito. Questa potrebbe essere una soluzione migliore rispetto a Rangely.js che è molto più pesante. – Roberto

+0

Anche per me è un fascino e penso che sia il modo migliore per farlo. – AsGoodAsItGets

+0

Link è morto. Qualcuno potrebbe fornire un nuovo link? –

Problemi correlati