Tengo un div satisfactorio que contiene el típico editor wysiwyg html (negrita, anclajes, listas).Contenteditable DIV: cómo puedo determinar si el cursor está al principio o al final del contenido
Necesito determinar si el cursor actual está, enKeyDown, al inicio y al final de la div. El motivo es que, en función de la posición del cursor y de la tecla presionada, podría fusionar este div con el div anterior en un espacio posterior, o crear un nuevo div siguiente en enter.
He estado jugueteando con los rangos, pero cuando trabajas con html dentro del elemento, las cosas se vuelven bastante complicadas.
Espero que esté pasando por alto alguna solución simple.
¿Hay una manera relativamente simple de determinar esto? Estoy abierto a usar una biblioteca como Rangy.
Gracias!
Editar: Estoy pensando en algo como lo siguiente:
$('.mycontenteditable').bind('keydown', handle_keydown)
handle_keydown = function(e) {
range = window.getSelection().getRangeAt(0)
start_range = document.createRange()
start_range.selectNodeContents(this.firstChild)
start_range.collapse(true) // collapse to start
is_start = start_range.compareBoundaryPoints(Range.START_TO_START,range)
end_range = document.createRange()
end_range.selectNodeContents(this.lastChild)
end_range.collapse(false)
is_end = end_range.compareBoundaryPoints(Range.END_TO_END,range)
}
¿Voy a correr en cualquier problema extraño con algo como esto?
Esto debe ser bastante robusta, a excepción de IE <9, que no soporta objetos de Campo o de selección. –
Tenga en cuenta que esta solución no tiene en cuenta las nuevas líneas. Si el único texto entre el cursor y el final es una serie de líneas nuevas, erróneamente indicará que el cursor está al final de la div. Las líneas vacías siempre se representan con '
', pero no se puede simplemente buscar '
' s en 'post_range.cloneContents() ', porque incluye la línea actual'
'si la línea actual es la última línea. Además, en Chrome 'cloneContents()' es exactamente '