我已经构建了一个将markdown转换为html的editor。现在我必须使用jquery autosize插件来调整文本区域的大小。
如果我使用内容可编辑的div,我可以绕过它。但内容可编辑div的问题在于它不保留新行。每按一次返回键,它就会插入一个新的div。这会将我的应用程序的markdown呈现为html。
有什么方法可以使内容可编辑div的行为与文本区域完全相同?
答案 0 :(得分:10)
在寻找答案而没有找到任何完全有效的东西后,我编写了自己的jQuery插件。
https://github.com/UziTech/jquery.toTextarea.js
我使用了white-space: pre-wrap;
并在输入时插入了“\n
”。这样我就可以使用$("div").text()
来获取文字而不用担心删除标记并格式化<br/>
的
样本:
答案 1 :(得分:1)
在上面的@Mr_Green评论之后,您应该看看Make a <br> instead of <div></div> by pressing Enter on a contenteditable
正确的JS代码是:
$(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;
}
}
});
})
您可以截取Enter
按键,并使用Javascript将其替换为<br>
:
$(function(){
$("#editable").keypress(function(e) {
if (e.which == 13) {
e.preventDefault();
if (document.selection) {
document.selection.createRange().pasteHTML("<br/>");
} else {
$(this).append("<br/>");
}
}
});
});