我正在为我的一个项目制作一个简单的编辑器,我需要使用一个可编辑的 div 使用contenteditable
属性。我需要两个功能:
- 两次输入后自动插入小时
- 创建一个段落而不是
<br>
输入并专注于它。
所以我写了这个(有一些灵感),这是负责的代码的一部分:
var intercept = {
keydown: function(e)
{
if( e.which == 13 ){
intercept.enterKey.call(null, e);
}
},
enterKey: function(e)
{
var $lastElm;
// Find the previous elm
if (document.selection) { // IE
$lastElm = $(document.selection.createRange().parentElement());
} else { // everyone else
$lastElm = $(window.getSelection().anchorNode);
}
// Handle enter key
if( !e.shiftKey )
{
// Check if two or more paragraphs
// are empty, so we can add an hr
if(
$.trim($lastElm.text()) === "" &&
!$lastElm.prev().is('hr')
){
document.execCommand('insertParagraph', false);
$lastElm.replaceWith($('<hr>', {contenteditable: false}));
}
// Or just add an paragraph
else{
document.execCommand('insertParagraph', false, true);
}
e.preventDefault();
}
}
}
这在 Chrome 中运行良好,但在 Firefox 中,它不会创建新<p>
元素,我认为它只是将当前文本包装在 ap
中,这是不可能的,因为它已经在 a 中p
。所以光标只停留在 Firefox 中,并且不会创建新段落。
你知道如何解决这个问题吗?
谢谢。