我正在使用基于 contenteditable 的富文本编辑器,并且正在添加“内联评论”的想法。
我希望评论可以内联编辑,也可以通过单击切换来折叠。
标记将类似于
<div id="editor" contenteditable='true'>
<p>Paragraph 1</p>
<p>Paragraph 2 <q class="inline-comment" tabindex="1"><span class="comment" tabindex="2">This is a comment</span><span class="inline-comment-control"><</span></q> This is more content.</p>
<p>Paragraph 3</p>
</div>
并且评论可以通过点击`.inline-comment-control'来折叠:
$('#editor').delegate('.inline-comment-control', "click", function() {$(this).closest('.inline-comment').toggleClass('collapsed')});
我在这里有一个简单的 jsfiddle:http: //jsfiddle.net/bJELv/
我的挑战是,当用户将光标放在评论和退格的右侧(或“删除”的对面)时,折叠切换被删除。
我想要发生的是整个.inline-comment
及其所有子级都被整体删除。
所以,我希望能够知道退格键将要删除的内容。
作为一个可满足的 DIV,这被证明是困难的,因为可能会发生无数的行为。基本上看起来我必须复制浏览器用来确定要做什么的逻辑(合并兄弟姐妹,删除父母前兄弟姐妹的最后一个孩子,等等)。我尝试使用 Rangy 来确定选择之前的内容,但我一直在遇到不同标记增加复杂性的极端情况(例如,注释在标签内,或类似的东西)。
我很确定没有办法轻松提取退格键的行为,所以另一个问题是,“有没有更好的方法来处理不删除 span.inline-comment-control 的同时仍然离开 span。评论简单可编辑”?
或者,是否有一个很好的描述浏览器应该如何处理 contenteditable 上的退格,所以我可以在 JS 中重现它?
我真的只对针对相对现代的浏览器(没有 IE < 9 等)感兴趣,并且正在使用 jquery 和 rangy。
我花了相当多的时间搜索 SO,并且有一些相关的问题,但我没有发现任何与这个问题直接相关的东西。