Как анализировать редактируемый текст DIV с совместимостью с браузером
я проблема сcontenteditable
разрывы строк на SAFARI / CHROME. Когда я нажимаю «возврат» на contentEditable<div>
вместо создания<br>
(как Firefox), они создают новый<div>
:
<div>Something</div>
<div>Something</div>
Это выглядит следующим образом (на contentEditable DIV):
Something
Something
Но после санации (удаления<div>
) Я получаю это:
SomethingSomething
В Firefoxcontenteditable
является:
Something
<br>
Something
И это после санации выглядит так же:
Something
Something
Есть ли решение, чтобы "нормализовать" это через браузеры?
Я нашел этот код наСоздайте <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;
}
}
});
});
Это работает, но(в САФАРИ и ХРОМЕ) Я должен дважды нажать клавишу «возврат», чтобы получить новую строку ...
Любая идея?
редактировать: С кодом, который я нашел (в нижней части этого вопроса) работает нормально, за исключением функции, которая "гарантирует<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> (contentEditable)