0

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

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

在制作报告时,我想确保通过网站输入的文本至少在两件事上保持一致 - 字体和字体大小 [说我希望它限制为 Arial 和大小 10]。

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

我想到的一个选项是 - 在粘贴内容之后,如果我可以运行 CKEditor 并使用一些选项来根据我的字体和大小规范替换内容。如果是这样,我该怎么做?

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

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

谢谢 pradeep

4

1 回答 1

1

第一种方法是简单地在事件上调用selectAllremoveFormat命令:getData

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可能会破坏您的选择,编辑器将无法恢复它。

这是一种肮脏的方式,但您可以轻松更改要删除的标签属性。你也可以使用这个:config.forcePasteAsPlainText = true;“dehtmllize”粘贴的内容。

但是,要温和地执行此操作,您应该阅读一些有关数据处理器的信息


温和的方法是:

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使用正则表达式过滤属性并删除一些您不喜欢的位。

于 2012-09-26T14:42:55.307 回答