Estoy tratando de extraer la selección exacta y la ubicación del cursor de un área de texto. Como de costumbre, lo que es fácil en la mayoría de los navegadores no está en IE.Document.selection.createRange de IE no incluye líneas en blanco iniciales o finales
estoy usando esto:
var sel=document.selection.createRange();
var temp=sel.duplicate();
temp.moveToElementText(textarea);
temp.setEndPoint("EndToEnd", sel);
selectionEnd = temp.text.length;
selectionStart = selectionEnd - sel.text.length;
que trabaja el 99% de las veces. El problema es que TextRange.text
no devuelve caracteres de línea nuevos iniciales o finales. Entonces, cuando el cursor está en un par de líneas en blanco después de un párrafo, cede una posición al final del párrafo anterior, en lugar de la posición real del cursor.
por ejemplo:
the quick brown fox| <- above code thinks the cursor is here
| <- when really it's here
La única solución que se me ocurre es insertar un carácter temporal antes y después de la selección, agarra la selección real y luego quitar esos caracteres temporales de nuevo. Es un truco, pero en un experimento rápido parece que funcionará.
Pero antes me gustaría asegurarme de que no haya una manera más fácil.
Agradable. Me gusta la idea de usar la longitud del texto en lugar del número realmente grande en moveStart/moveEnd. –
Ah, no vi esta. El resultado es 20-30ms ahora, excelente trabajo! –
@Andy: He escrito un complemento jQuery que incluye esto. Todavía no está documentado y se ha agrupado con un proyecto tenuemente relacionado, pero funciona: http://code.google.com/p/rangy/downloads/detail?name=textinputs_jquery-src.js –