Insertar nueva línea en la tecla enter en contenteditable div

Estoy tratando de insertar un carácter de nueva línea en lugar de lo que el navegador quiera insertar cuando presiono enter en un div satisfactorio.

Mi código actual se ve así:

if (e.which === 13) { e.stopPropagation(); e.preventDefault(); var selection = window.getSelection(), range = selection.getRangeAt(0), newline = document.createTextNode('\n'); range.deleteContents(); range.insertNode(newline); range.setStartAfter(newline); range.setEndAfter(newline); range.collapse(false); selection.removeAllRanges(); selection.addRange(range); } 

Esto parece funcionar en Chrome, Firefox y Safari, pero falla en Internet Explorer.

Mi requisito es que funcione en las versiones más recientes de Chrome / FF y similares (un par de versiones atrás no sería una mala idea) y en IE10 +.

He intentado muchas cosas diferentes, pero parece que no puedo hacer que funcione.

¡Cualquier ayuda es muy apreciada!

Editar: para aclarar, el error para mí en IE es que el símbolo de intercalación no se mueve cuando se inserta la línea nueva, sino que la nueva línea parece ser agregada después del símbolo de intercalación, que es un comportamiento extraño. Pero si presiono Enter one, luego muevo hacia abajo a esa línea con las teclas de flecha, y comienzo a presionar enter nuevamente, funciona como estaba previsto. No puedo decir lo que estoy haciendo mal aquí.

esto funciona en IE 11 y Chrome para mí

 if(getSelection().modify) { /* chrome */ var selection = window.getSelection(), range = selection.getRangeAt(0), br = document.createTextNode('\n'); range.deleteContents(); range.insertNode(br); range.setStartAfter(br); range.setEndAfter(br); range.collapse(false); selection.removeAllRanges(); selection.addRange(range); /* end chrome */ } else { document.createTextNode('\n'); /* internet explorer */ var range = getSelection().getRangeAt(0); range.surroundContents(newline); range.selectNode(newline.nextSibling); /* end Internet Explorer 11 */ } 

perdón por lo desorganizado que es. Usé getSelection (). Modify para determinar si era ie o no porque IE no tiene modificaciones por alguna razón.

¿algo como esto?

 if(e.which==13){ e.preventDefault(); $('#divID').html($('#divID').text()+"
"); }