我有一个问题contenteditable
SAFARI/CHROME 上的换行符。当我在 contentEditable 上按“返回”时<div>
,而不是创建一个<br>
(如 Firefox),他们创建了一个新的<div>
:
<div>Something</div>
<div>Something</div>
看起来像(在 contentEditable DIV 上):
Something
Something
但消毒后(去除<div>
),我得到这个:
SomethingSomething
在火狐浏览器中,contenteditable
is:
Something
<br>
Something
消毒后看起来是一样的:
Something
Something
有没有任何解决方案可以跨浏览器“标准化”这一点?
我在上面找到了这段代码通过在可编辑内容上按 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;
}
}
});
});
这可行,但是(在 SAFARI 和 Chrome 中)我必须按两次“返回”键才能换行......
任何想法?
Edit:使用我发现的代码(在这个问题的底部)工作正常,除了“确保<br>
元素始终是最后一个子元素...知道如何解决这个问题吗?
Edit 2:我在控制台上收到此错误:Uncaught TypeError: Object #<HTMLDocument> has no method 'createChild'
Edit 3:好的,我改变了document.createChild("br");
to document.createElement("br");
我想我可以在 FF/Safari/Chrome 中正常工作...全部返回<br>
对于新线路...
现在的问题是,当我在有序列表或无序列表中时,我需要获得一个新行而不需要<br>
...
Edit 4:如果有人对上次编辑的解决方案感兴趣:如果 createElement 函数位于 元素内,请避免使用该函数 (contentEditable)