Estoy usando un iframe editable por contenido para crear un resaltador de sintaxis en JavaScript y una de las cosas más importantes es poder sangrar el código correctamente.Rangos de selección en webkit (Safari/Chrome)
El siguiente código funciona como debería en Firefox:
// Create one indent character
var range = window.getSelection().getRangeAt(0);
var newTextNode = document.createTextNode(Language.tabChar);
range.insertNode(newTextNode);
range.setStartAfter(newTextNode);
crea una pestaña de carbón y mueve el cursor a la derecha del carácter. En Chrome y Safari, se inserta un carácter pero el cursor no se moverá a la derecha de él.
Inspeccioné el objeto de rango tanto en Chrome como en Firefox, y luego noté que el objeto de rango de Firefox es mucho más rico que el de Chrome. No he podido encontrar ninguna especificación del objeto range en webkit.
¿Cómo puedo hacer que este código funcione tanto para webkit como para Firefox?
¡Gracias!
¡Fantástico! Funciona tanto en Firefox como en Chrome :) ¡Gracias! – Christoffer
Por lo tanto, en Firefox simplemente llamando a range.setStartAfter() actualizará la selección, no se requiere la llamada selection.addRange(). Sin embargo, Chrome necesita la llamada addRange(). – maulik13
@ maulik13: Eso es verdad. Sin embargo, Firefox es el único navegador que hace eso y la especificación no dice nada al respecto, por lo que generalmente recomiendo usar la llamada 'addRange()' sin mencionar esa sutileza. –