为了解决您的问题,请始终将br元素保留为 contenteditable div 的最后一个元素。这将确保注入 br 元素时的可预测行为与注入 div 元素的浏览器默认设置相比。您可以检查 keyup 和 mouseup 上的lastChild以确保它是 br 元素。假设您有如下文件:
<div id="editable" contenteditable="true"></div>
您可以使用以下 JavaScript(w/jQuery 1.4+)将 br 元素保留为最后一个元素并注入 br 元素而不是 div div:
$(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;
}
}
});
});
在带有 Google Chrome 7、Mozilla Firefox 3.6、Apple Safari 5 的 Apple OS X 上进行了测试。尝试使用ierange 让它在 Windows Internet Explorer 中工作。