CKEditor - 从编辑器中获取内容以设置实时总字数

时间:2014-07-24 18:18:36

标签: javascript jquery ckeditor

我尝试从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();
    });

1 个答案:

答案 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更改事件结合使用,也可以推荐一些其他触发更新的事件。不要在每次更改时触发,而是设置超时以缓冲更新触发器(当用户键入时,您不想进行更新)。