gpt4 book ai didi

javascript - 使用 CKEditor 选择范围 - 奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 17:22:41 25 4
gpt4 key购买 nike

我试图在编辑的元素中选择特定范围,但每次光标都会跳到它的最后,我不明白为什么。

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

var tempRange = editor.createRange();
tempRange.setStart(tempRange.root, 20);
tempRange.setEnd(tempRange.root, 20);
editor.getSelection().selectRanges([tempRange]);

执行此命令后,光标跳转到元素文本的末尾。没有错误。奇怪的是,在 .selectRanges() 之前,startOffsetendOffset 被正确设置为 20,正如我设置的那样,尽管当我查看时在 .selectRanges() 之后的范围对象中,它们都设置为 4。

谁能解释一下为什么会发生这种情况吗?

编辑@oleq:

editor.editable().getHtml():

Lorem ipsum dolor sit amet<sup>1</sup> yada yada, something else and more stuff.

最佳答案

首先,您应该看看 W3 DOM Range specification 。准确地说,该图应该是您最感兴趣的:

enter image description here

然后,如果您在 CKEditor 的可编辑区域中考虑以下 HTML(我假设那里没有 <p>,对吧?)

<body>
Lorem ipsum dolor sit amet<sup>1</sup> yada yada, something else and more stuff
</body>

您可能会注意到以下代码

tempRange.setStart(tempRange.root, 20);
tempRange.setEnd(tempRange.root, 20);

没有意义,因为 <body> ( tempRange.root ) 只有 3 个子节点(一个文本节点、 <sup> 和另一个文本节点)。你真正想做的是这样的:

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.
<小时/>

一堆指向 CKEditor API 的有用链接:

关于javascript - 使用 CKEditor 选择范围 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23781827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com