¿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>.sizecaracteres anteriores .Respuestas:
Actualización más fácil:
Use el
field.selectionStartejemplo 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.selectiono 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.selectiondevuelve 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?thisrefiere 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
.selectionStartpropiedad 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
slicees una operación relativamente costosa y no agrega nada a esta 'solución':el.selectionStartes 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.f1es 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.selectionStartsoporte: 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