¿Cómo puedo obtener la posición de intercalación desde un campo de entrada?
He encontrado algunos fragmentos a través de Google, pero nada a prueba de balas.
Básicamente, algo como un complemento jQuery sería ideal, por lo que podría simplemente hacer
$("#myinput").caretPosition()
javascript
jquery
html
MarkB29
fuente
fuente
<input>
es mucho más simple que hacerlo en un<textarea>
.size
caracteres anteriores .Respuestas:
Actualización más fácil:
Use el
field.selectionStart
ejemplo en esta respuesta .Gracias a @commonSenseCode por señalar esto.
Vieja respuesta:
Encontré esta solución. No está basado en jquery, pero no hay ningún problema para integrarlo en jquery:
fuente
else if (oField.selectionStart || oField.selectionStart == '0')
podría serelse if (typeof oField.selectionStart==='number')
document.selection
, nofield.selection
o algo así. Además, fue posible en IE 7 (no sé si todavía es posible en 8+) seleccionar algo, y luego TAB fuera del campo sin perder la selección. De esta manera, cuando se selecciona el texto pero el campo no está enfocado,document.selection
devuelve la selección cero. Es por eso que, como solución para este error, debe centrarse en el elemento antes de leer eldocument.selection
.Buena, muchas gracias a Max.
He incluido la funcionalidad de su respuesta en jQuery si alguien quiere usarla.
fuente
input = $(this).get(0)
mismo queinput = this
?this
refiere a un conjunto completo envuelto. Sin embargo, su código sigue siendo incorrecto, debería serlothis.get(0)
. Su código probablemente todavía funcionó porque volver a envolver un conjunto envuelto no hace nada.MUY FÁCIL
Respuesta actualizada
Uso
selectionStart
, es compatible con todos los principales navegadores .Actualización: esto funciona solo cuando no se define ningún tipo o
type="text"
en la entrada.fuente
.selectionStart
propiedad en cualquier momento (document.getElementById('foobar').selectionStart
), no tiene que estar dentro de un detector de eventos.Tengo una solución muy simple . Pruebe el siguiente código con resultado verificado :
Te estoy dando el violín
fuente
slice
es una operación relativamente costosa y no agrega nada a esta 'solución':el.selectionStart
es equivalente a la longitud de su segmento; solo devuélvelo. Además, la razón por la que las otras soluciones son más complicadas es porque tratan con otros navegadores que no son compatiblesselectionStart
.f1
es tan significativo como 'user2782001'. 😉Ahora hay un buen complemento para esto: el complemento Caret
Luego puede obtener la posición usando
$("#myTextBox").caret()
o establecerla a través de$("#myTextBox").caret(position)
fuente
fuente
Hay algunas buenas respuestas publicadas aquí, pero creo que puede simplificar su código y omitir la verificación de
inputElement.selectionStart
soporte: no solo es compatible con IE8 y versiones anteriores (consulte la documentación ) que representa menos del 1% del uso actual del navegador .fuente
Quizás necesite un rango seleccionado además de la posición del cursor. Aquí hay una función simple, ni siquiera necesita jQuery:
Digamos que quiere llamarlo en una entrada cada vez que cambia o el mouse mueve la posición del cursor (en este caso estamos usando jQuery
.on()
). Por razones de rendimiento, puede ser una buena idea agregarsetTimeout()
o algo así como guiones bajos_debounce()
si los eventos están llegando:Aquí hay un violín si quieres probarlo: https://jsfiddle.net/Dhaupin/91189tq7/
fuente
fuente