jquery Establecer la posición del cursor en div contenteditable

La versión anterior de la pregunta está debajo, después de investigar más, decidí reformular la pregunta. El problema es que antes, necesito enfocar una div contenida sin resaltar el texto, haciendo el enfoque directo resalta el texto en Chrome.

Me doy cuenta de que las personas resolvieron estos problemas en áreas de texto al restablecer la posición de intercalación en el área de texto. ¿Cómo puedo hacer eso con un elemento contento? Todos los complementos que he intentado solo funcionan con textareas. Gracias.

Viejo fraseo de la pregunta:

Tengo un elemento contento que quiero enfocar, pero solo para colocar el cursor al frente del elemento, en lugar de seleccionar todo.

elem.trigger('focus'); con jquery selecciona todo el texto en todo el elemento en chrome. Firefox se comporta correctamente y establece el símbolo de intercalación al principio del texto. ¿Cómo puedo hacer que Chrome se comporte de la manera que quiero, o quizás el foco no es lo que estoy buscando?

Gracias a todos.

demo : http://so.lucafilosofi.com/jquery-setting-cursor-position-in-contenteditable-div/

  

Lorem

ipsum dolor sit amet, consectetur adipiscing elit.

Aenean.

   

Tal vez estoy malinterpretando la pregunta, pero ¿no haría lo siguiente (suponiendo que un

editable con id “editable”)? El temporizador está ahí porque en Chrome, el comportamiento del navegador nativo que selecciona el elemento completo parece activarse después del evento de focus , anulando así el efecto del código de selección a menos que se posponga hasta después del evento de enfoque:

 var div = document.getElementById("editable"); div.onfocus = function() { window.setTimeout(function() { var sel, range; if (window.getSelection && document.createRange) { range = document.createRange(); range.selectNodeContents(div); range.collapse(true); sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } else if (document.body.createTextRange) { range = document.body.createTextRange(); range.moveToElementText(div); range.collapse(true); range.select(); } }, 1); }; div.focus(); 

Sí, sucede porque has usado

 elem.trigger('focus'); 

intente usar la clase o para identificar el elemento sobre el que desea disparar un evento desencadenante.

Logré resolver ese problema después de hurgar un poco en el DOM.

 elm.focus(); window.getSelection().setPosition(0); 

Probablemente solo funcione en los navegadores WebKit, pero como es la única fuente del problema, agregué un condicional (usando jQuery)

 if(!$.browser.webkit) { elm.focus(); } else { elm.focus(); window.getSelection().setPosition(0); } 

Espero que esto resuelva tu problema.

Establecer la posición del puntero en la etiqueta pre o div:

 function setCursor(pos) { var el = document.getElementById("asd"); var range = document.createRange(); var sel = window.getSelection(); range.setStart(el.childNodes[0], pos); range.collapse(true); sel.removeAllRanges(); sel.addRange(range); el.focus(); } $('button').click(function () { setCursor(5); }); 
  
asd two