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的一系列有用链接:
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.