¿Cómo se obtiene la posición de intercalación en <textarea>
JavaScript?
Por ejemplo: This is| a text
Esto debería volver 7
.
¿Cómo conseguirías que devuelva las cadenas que rodean el cursor / selección?
Por ejemplo: 'This is', '', ' a text'
.
Si la palabra "es" está resaltada, entonces volvería 'This ', 'is', ' a text'
.
javascript
cursor
textarea
caret
Errante inquieto
fuente
fuente
textarea.selectionStart
,textarea. selectionEnd
,textarea.setSelectionRange
developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElementRespuestas:
Con Firefox, Safari (y otros navegadores basados en Gecko) puede usar fácilmente textarea.selectionStart, pero para IE eso no funciona, por lo que tendrá que hacer algo como esto:
( código completo aquí )
También le recomiendo que consulte el complemento jQuery FieldSelection , que le permite hacer eso y mucho más ...
Editar: en realidad volví a implementar el código anterior:
Mira un ejemplo aquí .
fuente
Safari (and other Gecko based browsers)
Parece implicar que Safari usa Gecko. Gecko es el motor de Mozilla; Safari usa WebKit.if (el.selectionStart) { return el.selectionStart; }
...Actualizado 5 de septiembre de 2010
Como parece que todos se dirigen aquí para este problema, estoy agregando mi respuesta a una pregunta similar, que contiene el mismo código que esta respuesta pero con antecedentes completos para aquellos que estén interesados:
El documento document.selection.createRange de IE no incluye líneas en blanco iniciales o finales
Tener en cuenta los saltos de línea finales es complicado en IE, y no he visto ninguna solución que lo haga correctamente, incluidas otras respuestas a esta pregunta. Sin embargo, es posible usar la siguiente función, que le devolverá el inicio y el final de la selección (que son los mismos en el caso de un cursor) dentro de un
<textarea>
texto<input>
.Tenga en cuenta que el área de texto debe tener foco para que esta función funcione correctamente en IE. En caso de duda, llame
focus()
primero al método del área de texto.fuente
range && range.parentElement() == el
está ahí para probar si la selección está dentro del área de texto y si es necesaria. No hay problema con la función de obtener la posición de intercalación siempre que el área de texto tenga el foco . Si no está seguro, llame alfocus()
método del área de texto antes de llamargetInputSelection()
. Agregaré una nota a la respuesta.mousedown
evento o agregarunselectable="on"
al<div>
elemento.Modifiqué la función anterior para tener en cuenta los retornos de carro en IE. No se ha probado, pero hice algo similar con él en mi código, por lo que debería ser viable.
fuente
Si no tiene que admitir IE, puede usar
selectionStart
yselectionEnd
atributos detextarea
.Para obtener la posición de cuidado simplemente use
selectionStart
:Para obtener las cadenas que rodean la selección, use el siguiente código:
Demo en JSFiddle .
Ver también documentos HTMLTextAreaElement .
fuente