Estoy escribiendo un autocompletador para un DIV editable de contenido (es necesario que muestre el contenido html en el cuadro de texto. Por lo tanto, prefiero usar DIV contenteditable sobre TEXTAREA). Ahora necesito encontrar la posición del cursor cuando hay un evento keyup/keydown/click en el DIV. Para que pueda insertar el html/texto en esa posición. No tengo ni idea de cómo puedo encontrarlo mediante algún cálculo o si hay una funcionalidad de navegador nativo que me ayude a encontrar la posición del cursor en una DIV contenta.¿Cómo encontrar la posición del cursor en una DIV contenteditable?
Respuesta
Si todo lo que quiere hacer es insertar algo de contenido en el cursor, no hay necesidad de encontrar su posición explícitamente. La siguiente función insertará un nodo DOM (elemento o nodo de texto) en la posición del cursor en todos los navegadores de escritorio convencionales:
function insertNodeAtCursor(node) {
var range, html;
if (window.getSelection && window.getSelection().getRangeAt) {
range = window.getSelection().getRangeAt(0);
range.insertNode(node);
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
html = (node.nodeType == 3) ? node.data : node.outerHTML;
range.pasteHTML(html);
}
}
Si prefiere insertar una cadena HTML:
function insertHtmlAtCursor(html) {
var range, node;
if (window.getSelection && window.getSelection().getRangeAt) {
range = window.getSelection().getRangeAt(0);
node = range.createContextualFragment(html);
range.insertNode(node);
} else if (document.selection && document.selection.createRange) {
document.selection.createRange().pasteHTML(html);
}
}
ACTUALIZACIÓN
Siguiendo los comentarios de la OP, se sugiere emplear mi propia Rangy biblioteca, que añade un envoltorio de IE TextRange
objeto que se comporta como un rango DOM. Un DOM Range consiste en un límite de inicio y final, cada uno de los cuales se expresa en términos de un nodo y un desplazamiento dentro de ese nodo, y un conjunto de métodos para manipular el rango. El MDC article debe proporcionar alguna introducción.
@Tim, gracias por su respuesta. Esto funciona cuando necesito insertar en la posición actual del cursor. Probablemente lo que quise decir es poder colocar el cursor en una posición particular e insertar allí. Supongamos que conozco la posición actual del cursor y quiero retroceder algunas posiciones e insertar html cuando hago clic desde un menú desplegable de autocompletar. (¿Estoy hablando de encontrar un puesto e insertarlo en un DOM?) –
OK, he actualizado mi respuesta. –
- 1. jquery Establecer la posición del cursor en contenteditable div
- 2. Cambiar la posición del cursor en la div contenteditable después de cambiar innerHTML
- 3. Guardar y restaurar la posición de intercalación para contentEditable div
- 4. editor de texto contentEditable y el cursor de posición
- 5. Cómo encontrar la posición del cursor en un JTextArea
- 6. Encontrar la posición del texto del cursor en JTextField
- 7. Establecer la posición de intercalación justo después del elemento insertado en un contentEditable div
- 8. ¿Cómo encontrar la posición global del cursor de texto?
- 9. Encontrar la posición del cursor en un cuadro de texto
- 10. Insertar texto en Javascript contenteditable div
- 11. Contenteditable DIV: cómo puedo determinar si el cursor está al principio o al final del contenido
- 12. Cómo obtener la posición del cursor
- 13. JavaScript 'contenteditable' - obtener/establecer Caret Posición
- 14. Cómo obtener la posición del cursor en un Edittext
- 15. Personalizar el cursor de texto en el elemento contenteditable
- 16. Posición del cursor en la abreviatura VIM
- 17. Cómo establecer la posición del cursor en UITextView
- 18. posición del cursor del mouse en Javascript?
- 19. posición del cursor en un UITextView
- 20. contenteditable div no realmente editable en webkit
- 21. Insertar texto en el cursor en un contenido div editable
- 22. ¿Cómo verifico si el texto bajo el cursor en un div contenteditable es "negrita"
- 23. Obteniendo la posición del cursor en un Textarea
- 24. EditTextPreference y la posición predeterminada del cursor
- 25. ¿Cómo obtener la posición del cursor en bash?
- 26. Cómo obtener la posición del cursor en un eclipse TextEditor
- 27. La posición del cursor cambió el evento
- 28. Cómo determinar la posición del cursor de texto en Windows
- 29. ¿Cómo navegar a la última posición del cursor en Eclipse?
- 30. ¿Cómo obtengo la posición actual del cursor de la pantalla?
posición del cursor o posición del cursor? Entonces, de hecho, ¿necesita encontrar la posición de intercalación por coordenadas? –