Mi tarea es establecer un cursor de texto deben aparecer dentro de un nodo lapso de vacío dentro de un div contentEditable
.Ajuste de la posición de intercalación a un nodo vacío dentro de un elemento contentEditable
El siguiente no me causa problemas en Firefox 3.6:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/jquery-1.4.3.min.js">
</script>
<style>
#multiple {
border: 1px solid #ccc;
width: 800px;
min-height: 20px;
padding: 5px;
outline: none;
}
</style>
<script>
$(document).ready(function(){
var contentEditable = document.getElementById('multiple');
var lastItem = contentEditable.getElementsByTagName('span').item(2);
var selectElementText = function(el, win){
win = win || window;
var doc = win.document, sel, range;
if (win.getSelection && doc.createRange) {
range = doc.createRange();
range.selectNodeContents(el);
range.collapse(false);
sel = win.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
else
if (doc.body.createTextRange) {
range = doc.body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
contentEditable.focus();
selectElementText(lastItem);
});
</script>
<title>Range Selection Tasks (Make Me Want to Cry)</title>
</head>
<body>
<div id="multiple" contentEditable="true">
<span style="color:red">First</span><span style="color:green">Second</span><span style="color:blue"></span>
</div>
</body>
</html>
... pero en Webkit y el IE, el foco se establece en la penúltima lapso. No tengo idea por qué. Funciona si pongo un espacio dentro del último tramo, pero luego obtengo una selección de rango de un carácter.
Una vez dicho esto, es aceptable tener un espacio en blanco en el último nodo si el cursor está en el principio.
Cualquier ayuda con esto sería muy apreciada. Gracias de antemano.
Gracias por su rápida y considerada respuesta. No vas a creer cuántos pirateos y soluciones diferentes he intentado al intentar que esto funcione. En realidad, si tiene experiencia con IE, probablemente tenga una idea justa. Es bueno saber que IE9 finalmente adopta el modelo estándar. Con un poco de suerte, debería tener todos mis usuarios migrados en 2019 ... – Mike
¡Hola! Estoy bastante seguro de que es imposible colocar el cursor dentro de un elemento en línea vacío en IE. De manera más general, en IE es imposible ubicar el símbolo de intercalación al comienzo del primer nodo de texto dentro de un elemento. Esto también es cierto en WebKit: https://bugs.webkit.org/show_bug.cgi?id=15256#c4. Agregar espacios en blanco es tan bueno como parece, creo. He recurrido a insertar un carácter de lista de materiales Unicode ('U + FEFF', representa el ancho cero en todos los navegadores principales) al comienzo de un nodo de texto, que funciona pero deja la pesadilla logística de eliminar las listas de materiales cuando el cursor se mueve a otra parte . –
¡Uf! ¡Que desagradable! Gracias. – bobince