Umgang mit Zeilenumbrüchen bei contentEditable DIV

Ich habe ein problem mit contenteditable Zeilenumbrüche auf SAFARI/CHROME. Wenn ich drücken Sie "return" auf eine contentEditable <div>anstatt eine <br> (wie Firefox), erzeugen Sie eine neue <div>:

<div>Something</div>
<div>Something</div>

Dass so aussieht (auf der contentEditable DIV):

Something
Something

Aber nach Bereinigung (entfernen <div>), bekomme ich diese:

SomethingSomething

In Firefox, die contenteditable ist:

Something
<br>
Something

Ist und dass nach Bereinigung sieht das gleiche:

Something
Something

Ist es eine Lösung zu "normalisieren" das ist in allen Browsern?

Ich habe festgestellt, das der code auf Machen Sie eine <br> statt <div></div> durch drücken der EINGABETASTE auf einem contenteditable

$(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;
      }
    }
  });
});

Dies funktioniert, aber (in SAFARI und CHROME) ich drücken zwei mal die "return" - Taste eine neue Zeile...

Irgendeine Idee?

Bearbeiten: Mit dem code fand ich ( am Ende dieser Frage) ist in Ordnung, außer die Funktion, "stellt sicher, dass <br> element ist immer der lastChild... keine Ahnung, wie man dieses Problem beheben?

Edit 2: ich bin immer diese Fehlermeldung auf der Konsole: Uncaught TypeError: Object #<HTMLDocument> has no method 'createChild'

Edit 3: Ok, ich änderte die document.createChild("br"); zu document.createElement("br"); und ich denke ich habe es in FF/Safari/Chrome... Alle zurück <br> für die neuen Linien...

Das problem ist jetzt, dass wenn ich innerhalb einer Geordneten oder Ungeordneten Liste, die ich brauche, um eine neue Zeile ohne <br>...

Edit 4: Wenn jemand Interesse an der Lösung der letzten änderung: Vermeiden Sie die createElement-Funktion, wenn es innerhalb eines <LI> - element (contentEditable)

InformationsquelleAutor der Frage Santiago | 2011-05-16

Schreibe einen Kommentar