Tengo una caja impar para elementos contenteditable
dentro de HTML. Tenemos un editor de texto enriquecido en el que los clientes cargan plantillas prefabricadas (por nosotros), y luego pueden modificar esa plantilla como quieran (principalmente).Líneas nuevas y contenteditable con etiquetas anidadas no editables
Las partes de nuestras plantillas se han marcado para que no se puedan editar directamente, pero se pueden quitar, etc. Sin embargo, parece haber un problema cuando un elemento es el primer elemento de una línea (directamente después de una etiqueta <br/>
), y el usuario marca el DEL
en la línea superior. Debido a que es contenteditable=false
, el navegador parece eliminar no el <br/>
, sino todo el tramo no editable.
HTML de ejemplo es como esto
<div contenteditable=true>
<span>blah blah blah</span><br/>
<span contenteditable="false">You cant edit this value directly</span>
</div>
Si el usuario pone el cursor después de la blah blah blah
, y le pega DEL
se borra todo el contenido editable siguiente, en lugar del salto de línea.
¿Hay alguna manera, javascript o de otro modo, para corregir este comportamiento?
Ive engañado tratando de detectar la posición del cursor (utilizando rangos), e insertando espacios temporales, etc., pero no puedo conseguir que tenga el comportamiento deseado, que es solo que la etiqueta no editable se lleva hasta la línea anterior.
Hemos limitado el uso del editor solo a Chrome, por lo que no debe preocuparse por IE o FF.
¿'
' es parte de su plantilla? Si es así, ¿no podrías usar 3 'div' en lugar de usar'
'? –
Sí. Por razones que no estoy del todo seguro (probablemente para la representación), hemos anulado la tecla Enter para insertar un salto de línea en lugar de permitir que el navegador inserte, en este caso, divs. –
Otra solución podría ser tomar el control total sobre los eventos clave de eliminación. Puede usar la funcionalidad heredada cuando sea necesario y bloquear el evento cuando no sea deseable. O incluso use una lógica de eliminación 100% personalizada. * Editar: * Admitido obtener la posición de intercalación puede ser un poco complicado, pero sin duda es posible. –