在令人满意的DIV jquery解决方案中按下BACKSPACE的浏览器差异?

时间:2013-07-09 10:53:28

标签: jquery firefox contenteditable backspace

我在编写一个小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修复吗?

0 个答案:

没有答案