我在编写一个小CMS时遇到问题,可以选择用户添加和删除段落。在所有浏览器中,BACKSPACE按钮的作用略有不同。我想要实现的是用户可以通过按ENTER键添加段落(P)并通过删除带有BACKSPACE的文本删除P,我找不到任何好的答案。
我制作了这个剧本:
$(document).keydown(function(e){
if ( e.keyCode == 8 && e.target.tagName != 'DIV' ) {
e.preventDefault();
}
});
如果未关注可信任的DIV,则通过按BACKSPACE来防止删除新添加的段落。还要避免导航上一页问题。
<div class="wrap" contenteditable="true">
<p class="paragraph" id="parg1">
I want BACKSPACE not to delete first P tag - BACKSPACE should delete its text but not P itself.</p>
<p class="paragraph" id="parg2">
second paragraph
</p></div>
检查FIREFOX下的jsfiddle中的代码
一切都按照我想要的方式在CHROME中工作,我希望它至少在Firefox中能够正常工作。
OPERA几乎可以满足我的需要,只有在没有任何理由的情况下,如果第二段通过按BACKSPACE合并,它会在第一段的第一个字母之前添加2个SPACE。但是这些浏览器的优点是它们根本不会删除第一段。
当合并段落时,IE会比OPERA添加更多空格,但稍后可能会删除第一段 - 不幸的是。
但我真正需要的是Firefox工作,它做了一些疯狂的事情。我希望BACKSPACE不要删除第一个P标签。否则文本光标从.paragraph“掉出”到.wrap。我希望永远有第一个P-BACKSPACE应该删除它的文本而不是P本身。
此外,如果按下BACKSPACE并将光标放在第二段的第一个字母之前,则删除P标签并将光标“掉出”到.wrap。如果你再次按BACKSPACE,光标跳转到前一个P.但是如果你稍后按ENTER(创建新的P)然后再次退格,突然一切都按预期工作 - 光标跳到前一个P而不会掉到.wrap。为什么?我希望它从一开始就像那样工作,就像在Chrome中一样。
它是FIREFOX的一些bug吗?它可以用jquery修复吗?