CKEditor:如何确保输入的一致性

时间:2012-09-26 06:50:46

标签: javascript ckeditor

我在我的网站上使用CKeditor来获取用户输入。我正在使用CKEditor,因为我希望用户能够进行某种格式化,例如使文本变粗,斜体,复制粘贴内容的能力等。 我得到的输入也用于制作一些报告。

现在我面临的问题是一些用户是不同的字体[有些使用Arial,一些Calibiri等]并且还使用他们偏好的字体大小。

在制作报告时,我希望确保通过网站输入的文本至少有两个内容的一致性 - 字体和字体大小[比如我希望它仅限于Arial和大小为10]。

我正在考虑禁用CKEditor功能来选择字体和字体大小。但是如果用户正在复制粘贴内容,那么我仍然会遇到字体和大小的问题。我正在寻找可以尝试的选项。

我想到的一个选项是 - 在粘贴内容后,如果我可以运行CKEditor,并根据我的font& amp;的规范来替换内容。尺寸。如果是这样,我该怎么做?

我想的另一个选择是 - 在表单中有另一个字段,它将从用户输入的字段中获取输入,并根据我的规范使用CKEditor设置值。

在这两种情况下,我都需要知道用户何时完成了对该字段的操作,以便我更新相同或不同的字段。 有什么建议吗?

感谢 普拉迪普

1 个答案:

答案 0 :(得分:1)

第一种方法是在selectAll事件上调用removeFormatgetData命令:

CKEDITOR.replace( 'editor1', {
    on: {
        getData: function() {
            // Save the old selection
            var ranges = this.getSelection().getRanges();

            this.execCommand( 'selectAll' );
            this.execCommand( 'removeFormat' );

            // Restore the selection
            this.getSelection().selectRanges( ranges );
        }
    }
});

如果您愿意,也可以在paste活动中执行此操作。请注意removeFormat可能会破坏您的选择,编辑将无法恢复它。

这是一种肮脏的方式,但您可以轻松地删除change tagsattributes。你也可以使用这个:config.forcePasteAsPlainText = true;来“dehtmllize”粘贴的内容。

然而,为了轻轻地做到这一点,你应该阅读一点关于the data processor


温和的方法是:

CKEDITOR.replace( 'editor1', {
    on: {
        instanceReady: function() {
            this.dataProcessor.htmlFilter.addRules({
                attributes: {
                    style: function( attribute ) {
                        return false;
                    },
                    width: function( attribute ) {
                        return false;
                    },
                    height: function( attribute ) {
                        return false;
                    },
                    // ...
                    // You can modify (remove) any attribute you want
                }
            });
        }
    }
});

最后,您甚至可以使用正则表达式过滤style属性,并删除一些您不喜欢的位。

相关问题