У меня проблема с разрывами строк contenteditable
на SAFARI/CHROME. Когда я нажимаю "return" на contentEditable <div>
, вместо создания <br>
(например, Firefox), они создают новый <div>
:
<div>Something</div>
<div>Something</div>
Это выглядит как (на contentEditable DIV):
Something
Something
Но после дезинфекции (удаление <div>
) я получаю следующее:
SomethingSomething
В Firefox contenteditable
:
Something
<br>
Something
И что после санитазы выглядит одинаково:
Something
Something
Есть ли какое-либо решение "нормализовать" это в браузерах?
Я нашел этот код на Сделать a <br> вместо <div> </div> нажав Enter на доступном для контента
$(function(){
$("#editable")
// make sure br is always the lastChild of contenteditable
.live("keyup mouseup", function(){
if (!this.lastChild || this.lastChild.nodeName.toLowerCase() != "br") {
this.appendChild(document.createChild("br"));
}
})
// use br instead of div div
.live("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br");
range.deleteContents();
range.insertNode(br);
range.setStartAfter(br);
range.setEndAfter(br);
range.collapse(false);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
});
Это работает, но (в SAFARI и CHROME) Я должен нажать два раза клавишу "возврат", чтобы получить новую строку...
Любая идея?
Изменить: с кодом, который я нашел (в нижней части этого вопроса) работает отлично, кроме функции, которая "гарантирует, что элемент <br>
всегда является lastChild... Любая идея о как это исправить?
Изменить 2: Я получаю эту ошибку на консоли: Uncaught TypeError: Object #<HTMLDocument> has no method 'createChild'
Изменить 3: Хорошо, я изменил document.createChild("br");
на document.createElement("br");
, и я думаю, что получил его в FF/Safari/Chrome... Все возвращают <br>
для новых строк...
Проблема в том, что когда я попадаю в упорядоченный или неупорядоченный список, мне нужно получить новую строку без <br>
...
Изменить 4: Если кто-то заинтересован в решении последнего редактирования: Избегите функции createElement, если она находится внутри символа <LI> element (contentEditable)