【发布时间】:2012-01-18 17:29:00
【问题描述】:
我在开发将不可编辑的内容插入文本流的 CKEditor 插件时遇到问题。我一直在尝试使用范围函数,但由于文档不够出色,因此收效甚微。因此,给定一些文本,假设插件插入“[[uneditable stuff]]”,然后在 WYSIWYG 显示中将其包装在一个跨度中,以便可以设置颜色样式:
<p>This is some text[[uneditable stuff here]]</p>
当第一次插入不可编辑的内容时,我们希望用户能够继续键入或按 Enter 键换行。以下代码(我在这里得到:How to set cursor position to end of text in CKEditor?)在 Firefox 中有效,但(自然)在 IE9、8 或 7 中无效:
var s = editor.getSelection();
editor.insertElement(e); // element 'e'= a span created earlier
var p = e.getParent();
s.selectElement(p);
var selected_ranges = s.getRanges();
selected_ranges[0].collapse(false); // false = to the end of the selected node
s.selectRanges(selected_ranges); // putting the current selection there
所以我想要发生的是光标位于“^”位置:
<p>This is some text<span>[[uneditable stuff here]]</span>^</p>
如果新元素不在行尾,那么创建后,光标应该到这里:
<p>This is some text<span>[[uneditable stuff here]]</span>^ with more text after the new element</p>
在 FF 中,我可以将光标置于行尾,但不在新元素之后的位置。在 IE 中,光标仍在新的 SPAN 内,我在键入时看到它仍然是 span 的 css 颜色,当切换到 SOURCE 视图时,文本消失了(因为它是不可编辑的 span)。
我知道有一个 range.setStartAfter 方法,但即使在 FF/Chrome 中也完全无法使其工作。
在 CKEditor 中使用范围和选择方法是否有人真正掌握得很好?我知道我不知道!
开始认为只使用 editor.insertElement 是错误的,我应该学习 FakeElement (insertBogus?) 功能,但我还不明白。链接和图片等股票插件似乎没有这个问题。
【问题讨论】:
-
我正在努力解决这个问题。自从您发布以来,您是否取得了成功?
标签: plugins insert range ckeditor text-cursor