选择文本时,选择开始和结束的确切位置会有所不同,有时它从前一个元素的末尾开始,有时在文本节点的开头。我正在尝试对此进行规范化,使其始终从包含文本的元素的开头开始,并在包含文本的元素的末尾结束,并使其在浏览器中保持一致。
例如<b>mouse></b><i>cat</i>
选择“cat”时,chrome 似乎总是做正确的事情并返回一个带有 startContainer cat 和 startOffset 0 的选择。Firefox 和偶尔的 IE8 通常会从前一个元素(鼠标)的末尾开始,startOffset 为 5
我试图解决这个问题的粗略尝试没有成功:
var sr=rangy.getSelection().getRangeAt(0);
var sc=sr.startContainer;
if(sc.nodeType!=3||sr.startOffset==sc.length)
{
sr.setStartAfter(sc); //move start to next node in range
}
rangy.getSelection().setSingleRange(sr);
console.log(sr.inspect());
我错过了什么?