我在我的网站上使用CKeditor来获取用户输入。我正在使用CKEditor,因为我希望用户能够进行某种格式化,例如使文本变粗,斜体,复制粘贴内容的能力等。 我得到的输入也用于制作一些报告。
现在我面临的问题是一些用户是不同的字体[有些使用Arial,一些Calibiri等]并且还使用他们偏好的字体大小。
在制作报告时,我希望确保通过网站输入的文本至少有两个内容的一致性 - 字体和字体大小[比如我希望它仅限于Arial和大小为10]。
我正在考虑禁用CKEditor功能来选择字体和字体大小。但是如果用户正在复制粘贴内容,那么我仍然会遇到字体和大小的问题。我正在寻找可以尝试的选项。
我想到的一个选项是 - 在粘贴内容后,如果我可以运行CKEditor,并根据我的font& amp;的规范来替换内容。尺寸。如果是这样,我该怎么做?
我想的另一个选择是 - 在表单中有另一个字段,它将从用户输入的字段中获取输入,并根据我的规范使用CKEditor设置值。
在这两种情况下,我都需要知道用户何时完成了对该字段的操作,以便我更新相同或不同的字段。 有什么建议吗?
感谢 普拉迪普
答案 0 :(得分:1)
第一种方法是在selectAll
事件上调用removeFormat
和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
可能会破坏您的选择,编辑将无法恢复它。
这是一种肮脏的方式,但您可以轻松地删除change tags和attributes。你也可以使用这个: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
属性,并删除一些您不喜欢的位。