Konvertieren von HTML in nur-text in contentEditable

Ich habe eine contentEditable und ich Streifen die Formatierung der eingefügten Inhalte on('paste') durch den Fang der Falle. Dann habe ich den Fokus auf eine textarea, fügen Sie den Inhalt dort, und kopieren Sie den Wert. So ziemlich die Antwort von hier. Das problem ist, dass ich dies nicht tun:

$("#paste-output").text($("#area").val());

da ersetzen würde meine gesamten Inhalte mit dem eingefügten text. Also muss ich die Inhalte einfügen an Cursor-position. Ich habe ein script, das das tut:

pasteHtmlAtCaret($("#area").val());

//pastes CTRL+V content at caret position
function pasteHtmlAtCaret(html) {
  var sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      var el = document.createElement("div");
      el.innerHTML = html;
      var frag = document.createDocumentFragment(), node, lastNode;
      while ((node = el.firstChild)) {
        lastNode = frag.appendChild(node);
      }
      range.insertNode(frag);

      if (lastNode) {
        range = range.cloneRange();
        range.setStartAfter(lastNode);
        range.collapse(true);
        sel.removeAllRanges();
        sel.addRange(range);
      }
    }
  } else if (document.selection && document.selection.type != "Control") {
    document.selection.createRange().pasteHTML(html);
  }
}

Das problem ist nur, dass es Pasten, die HTML-Inhalte, auf die caret-position mit der html variable. Wie kann ich das transformieren, die in nur-text? Ich versucht, indem die jQuery .text(html) auf variable ohne Glück. So etwas könnte helfen:

el.textContent||el.innerText;

Irgendwelche Ideen oder eine bessere Lösung? Danke!


EDIT:
Vielen Dank für die Antworten ich meine modifizierten code und das Problem gelöst. Ich im Grunde kopiert den Wert von textarea in eine div und packte nur seine .text():

//on paste, strip clipboard from HTML tags if any
$('#post_title, #post_content').on("paste", function() {
    var text = $('<div>').html($("#area").val()).text();
    pasteHtmlAtCaret(text);
  }, 20);
});

InformationsquelleAutor der Frage Alex | 2013-02-28

Schreibe einen Kommentar