2011-12-16 10 views
6

Estoy trabajando en un editor wysiwyg usando div [contenteditable = true] y quiero establecer un rango de selección del desplazamiento X del nodo A al desplazamiento Y del nodo B. Lo hice bien en Firefox y IE9, el código es:Establecer el rango de selección en 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); 

Pero en IE8, el objeto gama es totalmente diferente, no tiene setStart/setEnd, y el objeto de la selección no tiene materias remove/AddRange. Por favor ayuda,

Respuesta

4

Eche un vistazo a rangy. Es una API de rango/selección de navegador cruzado. Eso es probablemente lo que necesitas.

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

+3

Rangely-core.js tiene una compresión de 42kb, lo que podría ser una consideración de diseño. – Roberto

3

tuve un problema similar encontraron esta polyfill que era bastante útil para mí, ya que no podía utilizar alto y delgado en mi situación: http://bl.ocks.org/visnup/3456262

Editar: la fuente original de hecho ha ido muertos. Mirando hacia atrás en mi viejo código parece que el polyfill nunca lo hizo en el código de liberación, simplemente fuimos con la detección de características de la siguiente manera:

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

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

... y los usuarios de IE8, por lo tanto, no son compatibles con esa función.

Sin embargo, no todo está perdido: hay un newer (than my original answer) polyfill on Github que podría funcionar si tiene que admitir IE8. Se ve bastante delgado y completo.

+1

Esta solución tiene solo 800 bytes comprimidos y se dirige a IE8 por requerimiento. Esta podría ser una solución mejor en contraste con Rangely.js, que es mucho más pesado. – Roberto

+0

Esto también funciona como un encanto para mí y creo que es la mejor manera de hacerlo. – AsGoodAsItGets

+0

El enlace está muerto. ¿Podría alguien proporcionar un nuevo enlace? –

Cuestiones relacionadas