【发布时间】:2016-06-12 19:56:32
【问题描述】:
当您在contentEditable 元素上按 Enter 键时,每个浏览器都会以不同的方式处理生成的代码:Firefox 插入 BR 标记,Chrome 插入 DIV 标记,而 Internet Explorer 插入 P 标记。。 p>
我一直在拼命寻找一种解决方案,至少对所有浏览器都使用 BR 或 P,最常见的答案是:
插入 BR 标签:
$("#editableElement").on("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);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
但这不起作用,因为浏览器似乎不知道如何在<br> 之后设置插入符号,这意味着以下是没有做任何有用的事情(特别是如果您在插入符号放在文本的末尾):
range.setStartAfter(br);
range.setEndAfter(br);
有些人会说:使用 double <br><br>,但是当您在文本节点内按 Enter 时,这会导致两个换行符。
其他人会说总是在 contentEditable 的末尾添加一个额外的 <br>,但如果你有一个 <div contenteditable><p>text here</p></div> 并且你将光标放在文本的末尾然后按 Enter,你会得到错误的行为。
所以我对自己说,也许我们可以用 P 代替 BR,常见的答案是:
插入 P 标签:
document.execCommand('formatBlock', false, 'p');
但这也不能始终如一地工作。
如您所见,所有这些解决方案都有一些不足之处。是否有其他解决方案可以解决此问题?
【问题讨论】:
-
我觉得你...我面临着同样烦人的问题:)
标签: javascript range selection contenteditable