Me gustaría crear una función simple que agregue texto en un área de texto en la posición del cursor del usuario. Tiene que ser una función limpia. Solo lo básico. Puedo entender el resto.
                    
                        javascript
                                textarea
                                
                    
                    
                        JoshMWilliams
fuente
                
                fuente

Respuestas:
fuente
} else {myField.selectionStart = startPos + myValue.length;myField.selectionEnd = startPos + myValue.length;selectionStartes un valor numérico y, por lo tanto, debe compararse0y no'0', y probablemente debería usar===Este fragmento podría ayudarlo con algunas líneas de jQuery 1.9+: http://jsfiddle.net/4MBUG/2/
fuente
Por el bien de Javascript adecuado
fuente
this.value = .... ¿Hay alguna manera de preservarlo?Nueva respuesta:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setRangeText
Sin embargo, no estoy seguro del soporte del navegador para esto.
Vieja respuesta:
Una modificación pura de JS de la respuesta de Erik Pukinskis:
Si desea cambiar el valor del texto seleccionado actualmente mientras escribe en el mismo campo (para un efecto de autocompletar o similar), pase
document.activeElementcomo primer parámetro.No es la forma más elegante de hacer esto, pero es bastante simple.
Usos de ejemplo:
fuente
Version 54.0.2813.0 canary (64-bit), que es básicamente Chrome Canary 54.0.2813.0. Finalmente, si desea que se inserte en el cuadro de texto por ID, usedocument.getElementById('insertyourIDhere')en lugar deelen la función.Erik Pukinskis. Actualizaré la respuesta para reflejarlo mejor.Una solución simple que funciona en Firefox, Chrome, Opera, Safari y Edge, pero probablemente no funcionará en los antiguos navegadores IE.
setRangeTextLa función le permite reemplazar la selección actual con el texto proporcionado o, si no hay selección, insertar el texto en la posición del cursor. Solo es compatible con Firefox, que yo sepa.Para otros navegadores hay un comando "insertText" que solo afecta al elemento html actualmente enfocado y tiene el mismo comportamiento que
setRangeTextInspirado parcialmente por este artículo
fuente
execCommandporque admiteundoe hizo insert-text-textarea . No es compatible con IE pero es más pequeñoexecCommandMDN lo considera obsoleto: developer.mozilla.org/en-US/docs/Web/API/Document/execCommand No sé por qué, ¡parece ser realmente útil!La respuesta de Rab funciona muy bien, pero no para Microsoft Edge, así que también agregué una pequeña adaptación para Edge:
https://jsfiddle.net/et9borp4/
fuente
Me gusta JavaScript simple, y generalmente tengo jQuery alrededor. Esto es lo que se me ocurrió, basado en mparkuk :
Aquí hay una demostración: http://codepen.io/erikpukinskis/pen/EjaaMY?editors=101
fuente