我正在尝试使用jQuery向现有的CKEditor添加一段文本。 这需要在单击链接时完成。
我试过这个解决方案,它适用于普通的textareas,但不适用于CKEditor:
jQuery.fn.extend({
insertAtCaret: function(myValue) {
return this.each(function(i) {
if (document.selection) {
//For browsers like Internet Explorer
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else if (this.selectionStart || this.selectionStart == '0') {
//For browsers like Firefox and Webkit based
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
})
}
});
还有一个选项可以使用:$('#editor').val()
,但这会将文本添加到结尾或开头,而不是光标。
那么,有没有办法实现这个目标?
答案 0 :(得分:37)
你应该使用这个
$.fn.insertAtCaret = function (myValue) {
myValue = myValue.trim();
CKEDITOR.instances['idofeditor'].insertText(myValue);
};
答案 1 :(得分:16)
CKEditor本身有一个插入文本的机制。如果直接更新textarea
,则实际上绕过了CKEditor必须跟踪输入文本的一些机制。试试这个:
CKEDITOR.instances.IDofEditor.insertText('some text here');
答案 2 :(得分:4)
我想我应该提一下,如果你使用cQuery编辑器的jQuery适配器,你可以用这种方式插入文本,看起来更清晰。
$('textarea#id_body').ckeditor().editor.insertText('some text here');
或者如果您要插入HTML
$('textarea#id_body').ckeditor().editor.insertHtml('<a href="#">text</a>');
答案 3 :(得分:0)
我需要类似的东西。我正在使用 CKEditor 3.6(由于预算)、JQuery 和 Bootstrap。我想要一个按钮列表,当点击 CKeditor 的主体时会插入一些文本。我从我的数据元素创建了一个按钮列表,然后添加了一个点击事件。我的对象是一个带有数据属性的输入按钮,我读取该属性以获取要粘贴的 val。
.insertText("textthere") 将为您提供将光标所在位置的值放入正文所需的操作。
$(function () {
$(".dataelement").click(function () {
InsertDataElement($(this).data("valtxt"));
});
});
function InsertDataElement(valtxt) {
CKEDITOR.instances['FullDescription'].insertText(valtxt);
}