我尝试从CKEditor的每个实例访问实时内容,以便设置总字数。在使用CKEditor之前,我将使用.getElementById()获取textarea的内容,然后通过将textarea元素传递给我的Countable()函数来获取实时字数,该函数将事件监听器附加到该区域。有没有办法获取CKEditor实例的实时内容?我知道它是一个iframe,所以我不确定是否可以获取实时内容。
我以前使用简单textarea的代码:
var area1 = document.getElementById('textarea1');
Countable.live(area1, function(counter1) {
jQuery("#word_count1").text(counter1.words);
a1_count = counter1.words;
total_count();
});
答案 0 :(得分:1)
这很大程度上取决于您的可数功能及其要求 - 它有助于看到它并了解它的要求。您可以通过几种不同的方法获取每个CKEditor实例的内容,这是一个
var contentArray = [];
var i = 0;
for (var instance in CKEDITOR.instances) {
var tmpEditor = CKEDITOR.instances[instance];
contentArray[i] = tmpEditor.getData();
i++;
}
现在内容在contentArray中。但是形成你的代码看起来像Countable需要一个元素。我不确定它可以使用哪种元素引用,但是这样的内容可能会让你更进一步:
var editor = CKEDITOR.instances.editor1; // change "editor1" to suit your editor
var element = editor.editable().$; // Get a reference to the body of the instance
Countable.live(element, function(counter1) {
jQuery("#word_count1").text(counter1.words);
a1_count = counter1.words;
total_count();
});
现在当然这只支持一个编辑器实例,但两个结合的例子可能会起作用。希望您不要使用内联实例(它需要一些额外的工作,但是可行)。还要注意,自然这些返回源,而不是文本。
也不是说你不想非常快地循环它,它非常 cpu密集。我建议将慢速循环与CKEditor更改事件结合使用,也可以推荐一些其他触发更新的事件。不要在每次更改时触发,而是设置超时以缓冲更新触发器(当用户键入时,您不想进行更新)。