Tengo una página con muchos cuadros de texto. Cuando alguien hace clic en un enlace, quiero que se inserte una o dos palabras donde está el cursor, o que se agregue al cuadro de texto que tiene el foco.
Por ejemplo, si el cursor / foco está en un cuadro de texto que dice 'manzana' y hace clic en un enlace que dice '[correo electrónico]', entonces quiero que el cuadro de texto diga 'apple [email protected]'.
¿Cómo puedo hacer esto? ¿Es esto posible, ya que si el foco está en un elemento de radio / menú desplegable / no textbox? ¿Se puede recordar el último centrado en el cuadro de texto?
javascript
jquery
Haga clic en Upvote
fuente
fuente
Respuestas:
Use esto, desde aquí :
fuente
areaId
?function deleteTxt() { var ele = document.getElementById('yourTextarea'); var text = ele.value; text = text.slice(0, ele.selectionStart) + text.slice(ele.selectionEnd); ele.value = text; return text; }
Tal vez una versión más corta, ¿sería más fácil de entender?
Escribí esto en respuesta a ¿Cómo agregar un texto a un cuadro de texto desde la posición actual del puntero con jquery?
fuente
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.La respuesta aprobada de George Claghorn funcionó muy bien simplemente insertando texto en la posición del cursor. Sin embargo, si el usuario había seleccionado texto y desea que se reemplace ese texto (la experiencia predeterminada con la mayoría del texto), debe realizar un pequeño cambio al configurar la variable 'atrás'.
Además, si no necesita admitir versiones anteriores de IE, las versiones modernas admiten textarea.selectionStart, por lo que puede eliminar toda la detección del navegador y el código específico de IE.
Aquí hay una versión simplificada que funciona para Chrome e IE11 al menos, y se encarga de reemplazar el texto seleccionado.
fuente
maxlength
en cuenta los elementos , por lo que el valor resultante después de la inserción podría ser más largo que el máximo.El código anterior no funcionó para mí en IE. Aquí hay un código basado en esta respuesta .
Saqué el
getElementById
para poder hacer referencia al elemento de una manera diferente.EDITAR: se agregó un fragmento en ejecución, jQuery no se está utilizando .
fuente
element.focus()
es un método JavaScript legítimo en DOMElements: w3schools.com/jsref/met_html_focus.aspusando la respuesta @quick_sliv:
fuente
Cómo insertar texto en la posición actual del cursor de un cuadro de texto a través de JQuery y JavaScript
Proceso
Aquí tengo 2 cuadros de texto y un botón. Tengo que hacer clic en una determinada posición en un cuadro de texto y luego hacer clic en el botón para pegar el texto del otro cuadro de texto en la posición del cuadro de texto anterior.
El problema principal aquí es obtener la posición actual del cursor donde pegaremos el texto.
fuente
Agregar texto a la posición actual del cursor implica dos pasos:
Demostración: https://codepen.io/anon/pen/qZXmgN
Probado en Chrome 48, Firefox 45, IE 11 y Edge 25
JS:
HTML:
fuente
Creo que podría usar el siguiente JavaScript para rastrear el último cuadro de texto enfocado:
Uso:
Una solución anterior (accesorios para gclaghorn) usa textarea y calcula la posición del cursor también, por lo que puede ser mejor para lo que desea. Por otro lado, este sería más liviano, si eso es lo que estás buscando.
fuente
La respuesta aceptada no funcionó para mí en Internet Explorer 9. Lo revisé y la detección del navegador no funcionaba correctamente, detecté ff (firefox) cuando estaba en Internet Explorer.
Acabo de hacer este cambio:
En vez de:
El código resultante es este:
fuente
Este complemento jQuery le brinda una forma prefabricada de selección / manipulación de intercalación.
fuente
solo puede enfocar el cuadro de texto requerido e insertar el texto allí. no hay forma de averiguar dónde está el foco AFAIK (¿tal vez interaccionando en todos los nodos DOM?).
compruebe este stackoverflow: tiene una solución para usted: ¿cómo puedo averiguar qué elemento DOM tiene el foco?
fuente
Contenido editable, HTML o cualquier otra selección de elementos DOM
Si está tratando de insertarlo con cuidado en un
<div contenteditable="true">
, esto se vuelve mucho más difícil, especialmente si hay niños dentro del contenedor editable.He tenido mucha suerte usando la biblioteca Rangy :
Tiene un montón de excelentes características como:
La demostración en línea no funcionaba la última vez que revisé, sin embargo, el repositorio tiene demostraciones en funcionamiento. Para comenzar, simplemente descargue el Repo de Git o NPM, luego abra ./rangy/demos/index.html
¡Hace que trabajar con la posición del cursor y la selección de texto sea muy fácil!
fuente
La respuesta de esta pregunta se publicó hace mucho tiempo y me topé con ella a través de una búsqueda en Google. HTML5 proporciona la API HTMLInputElement que incluye el método setRangeText () , que reemplaza un rango de texto en un elemento
<input>
o<textarea>
con una nueva cadena:Lo anterior reemplazaría la selección hecha adentro
element
conabc
. También puede especificar qué parte del valor de entrada reemplazar:Lo anterior reemplazaría los caracteres 4º a 6º del valor de entrada con
abc
. También puede especificar cómo se debe establecer la selección después de que se haya reemplazado el texto proporcionando una de las siguientes cadenas como el 4º parámetro:'preserve'
intenta preservar la selección. Este es el valor predeterminado.'select'
selecciona el texto recién insertado.'start'
mueve la selección justo antes del texto insertado.'end'
mueve la selección justo después del texto insertado.Compatibilidad del navegador
La página MDN para setRangeText no proporciona datos de compatibilidad del navegador, pero supongo que sería lo mismo que HTMLInputElement.setSelectionRange () , que es básicamente todos los navegadores modernos, IE 9 y superior, Edge 12 y superior.
fuente