How To Make A Content Editable Div Behave Like A Text Area?
I have built an editor that converts markdown to html. Right now I have to use jquery autosize plugin to resize the text area as it grows. If I use a content-editable div I can byp
Solution 1:
After searching for an answer and not finding anything that worked completely I wrote my own jQuery plugin.
https://github.com/UziTech/jquery.toTextarea.js
I used white-space: pre-wrap;
and inserted '\n
' on enter. That way I can use $("div").text()
to get the text and not worry about removing tags and formatting <br/>
's
DEMO:
Solution 2:
Edit
After the @Mr_Green comment above, you should have a look at Make a <br> instead of <div></div> by pressing Enter on a contenteditable
The JS code to make it right is :
$(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);
returnfalse;
}
}
});
})
;
You can intercept the Enter
key press and replace it with a <br>
with Javascript :
$(function(){
$("#editable").keypress(function(e) {
if (e.which == 13) {
e.preventDefault();
if (document.selection) {
document.selection.createRange().pasteHTML("<br/>");
} else {
$(this).append("<br/>");
}
}
});
});
Post a Comment for "How To Make A Content Editable Div Behave Like A Text Area?"