Javascript 选择具有CKEditor-wierd行为的范围

Javascript 选择具有CKEditor-wierd行为的范围,javascript,ckeditor,range,Javascript,Ckeditor,Range,我试图在一个编辑过的元素中选择一个特定的范围,但每次光标跳到它的最末端,我都不知道为什么 我正在创建我的范围并像这样选择它 var tempRange = editor.createRange(); tempRange.setStart(tempRange.root, 20); tempRange.setEnd(tempRange.root, 20); editor.getSelection().selectRanges([tempRange]); 执行此操作后,光标跳到元素文本的末尾。没有错

我试图在一个编辑过的元素中选择一个特定的范围,但每次光标跳到它的最末端,我都不知道为什么

我正在创建我的范围并像这样选择它

var tempRange = editor.createRange();
tempRange.setStart(tempRange.root, 20);
tempRange.setEnd(tempRange.root, 20);
editor.getSelection().selectRanges([tempRange]);
执行此操作后,光标跳到元素文本的末尾。没有错误。最重要的是,在
.selectRanges()
之前,
startOffset
endOffset
都被正确设置为20,就像我设置它们一样,尽管当我查看
.selectRanges()
之后的range对象时,它们都被设置为4

有人能解释一下为什么会这样吗

编辑@oleq:

editor.editable().getHtml():

Lorem ipsum dolor坐在我的位子上yada yada,还有其他的东西,还有更多的东西。

开始时,您应该看一看。准确地说,这个图表应该是你最感兴趣的:

那么,如果您在CKDDTER的可编辑区域中考虑下面的HTML(我假定没有<代码> <代码>,对不对?)/p> 没有意义,因为

tempRange.root
)只有3个子节点(一个文本节点、
和另一个文本节点)。你真正想做的是:

tempRange.setStart(tempRange.root.getFirst(), 20);
tempRange.collapse();
tempRange.select();
要证明它是正确的,请立即致电

tempRange.insertNode( new CKEDITOR.dom.text( '^' ) );
而编者的内容将变得

Lorem ipsum dolor si^t amet<sup>1</sup> yada yada, something else and more stuff.
Lorem ipsum dolor是一个很好的例子,其他的东西和更多的东西。

指向CKEditor API的一系列有用链接:

在编辑器内部提供HTML(
editor.editable().getHtml()
)。
tempRange.setStart(tempRange.root.getFirst(), 20);
tempRange.collapse();
tempRange.select();
tempRange.insertNode( new CKEDITOR.dom.text( '^' ) );
Lorem ipsum dolor si^t amet<sup>1</sup> yada yada, something else and more stuff.