На самом деле с вопросом я справился, но есть какое-то очень странное поведение что в Chrome, что в FF.
Значит сделал я так:
<div contenteditable="true">Lorem ipsum dolor sit amet</div>
И небольшой JS+JQ:
$('div[contenteditable="true"]').keypress(function(event) {
if ((event.which == 13 || event.which == 10) && !event.ctrlKey) {
event.preventDefault();
return false;
}
else if ((event.which == 13 || event.which == 10) && event.ctrlKey) {
var docFragment = document.createDocumentFragment();
//add a new line
var newEle = document.createTextNode('\n');
docFragment.appendChild(newEle);
//add the br, or p, or something else
newEle = document.createElement('br');
docFragment.appendChild(newEle);
//make the br replace selection
var range = window.getSelection().getRangeAt(0);
range.deleteContents();
range.insertNode(docFragment);
//create a new range
range = document.createRange();
range.setStartAfter(newEle);
range.collapse(true);
//make the cursor there
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
return false;
}
});
Вот живой пример -
https://jsfiddle.net/s1ma4t8u/
Обратите внимание, при попытке поставить курсор в конец строки и нажать
Ctrl + Enter, то не срабатывает с первого раза перевод строки, а только когда в
div[contenteditable] появляется второй
br. Как это побороть?