非常感谢蒂姆,我已经尝试过你的 Rangy 插件(查看之前的几个答案),它与我正在寻找的非常接近。不幸的是,当通过箭头键移动光标时,我注意到 FF 中有一个奇怪的行为。当光标进入一个跨度与另一个跨度时,左箭头不起作用。
我试图更清楚:
<div contenteditable='true' id='THE_EDITOR'>
some text <span class='in_red'>other in red</span><span class='in_blue'>||or in blue</span>
</div>
我用过“||” 来表示光标。在这种情况下:<span></span><span>||</span>
左箭头无法在 FF 中移动光标(我不明白原因),但如果两个元素之间至少有一个字符,则可以正常工作:<span></span>[space]<span>||</span>
如果您想尝试重现此“错误”,则代码为(使用 JQuery):
$("#THE_EDITOR").attr("contentEditable","true").keyup(function(){
var savedSel = rangy.saveSelection();
//this blok is only to clean the HTML code every time
$(this).children(".star").each(function(){
$(this).after($(this).html());
$(this).remove();
});
//to wrap the spewial word "*" with a personal formatting span
var str = $(this).html();
str = str.split("*").join("<span class='star'>*</span>");
$(this).html(str);
rangy.restoreSelection(savedSel);
rangy.removeMarkers(savedSel);
});
如果您尝试按顺序键入两个或多个“*”,然后使用左箭头向后移动,光标将不会移动。在它们之间放置一个空格或另一个字符,它会再次移动。