Il mio compito è quello di impostare un cursore di testo da visualizzare all'interno di un nodo di span vuoto all'interno di un div contentEditable
.Impostazione della posizione del cursore su un nodo vuoto all'interno di un elemento ContentEditable
Quanto segue non mi dà problemi su 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>
... ma su Webkit e IE, la messa a fuoco è impostato al penultima arco. Non ho idea del perché. Funziona se inserisco uno spazio all'interno dell'ultimo intervallo, ma poi ottengo una selezione dell'intervallo di un carattere.
Detto questo, è accettabile avere spazi bianchi nell'ultimo nodo se il cursore è all'inizio.
Qualsiasi aiuto con questo sarebbe molto apprezzato. Grazie in anticipo.
Grazie per la risposta rapida e ponderata. Non crederai a quanti diversi hack e soluzioni alternative ho tentato mentre cercavo di farlo funzionare. In realtà, se hai esperienza di IE, probabilmente hai una buona idea. Buono a sapersi che IE9 finalmente adotta il modello standard. Con un po 'di fortuna dovrei far migrare tutti i miei utenti entro il 2019 ... – Mike
Ciao! Sono abbastanza certo che è impossibile posizionare il punto di inserimento all'interno di un elemento inline vuoto in IE. Più in generale, in IE è impossibile posizionare il punto di inserimento all'inizio del primo nodo di testo all'interno di un elemento. Questo vale anche per WebKit: https://bugs.webkit.org/show_bug.cgi?id=15256#c4. L'aggiunta di spazi bianchi è buona come sembra, penso. Ho fatto ricorso all'inserimento di un carattere BOM Unicode ('U + FEFF', rendering come larghezza zero in tutti i principali browser) all'inizio di un nodo di testo, che funziona ma ti lascia l'incubo logistico di rimuovere le BOM quando il cursore si sposta altrove . –
Ugh! Quanto spiacevole! Grazie. – bobince