禁用元素属性的排序

时间:2015-03-12 20:16:03

标签: ckeditor ckeditor4.x

有没有办法禁用元素属性的排序,以便当allowedContent设置为true时checkDirty()将正常工作?

属性here

的排序示例
<div zattribute='z' attribute='a'>simple</div

变为

<div attribute="a" zattribute="z">simple</div>

导致checkDirty()调用始终返回true,即使用户实际上没有更改ckeditor用户界面中的任何内容。

3 个答案:

答案 0 :(得分:3)

CKEDITOR.on( 'instanceReady', function( ev ) {
    ev.editor.dataProcessor.writer.sortAttributes = 0;
});

将禁用页面上所有编辑器实例的属性排序。这在CKEditor文档的任何地方都没有涉及,并且是通过查看编辑器实例对象找到的。

答案 1 :(得分:1)

This是我最终根据Reinmar的建议使用的。

jsfiddle

var isdirty = function(ckeditor) {
        return ckeditor.initialdata !== ckeditor.getData();

    };
CKEDITOR.on('instanceReady', function (event) {
        event.editor.initialdata = event.editor.getData();
    });

答案 2 :(得分:0)

你的代码做了一些奇怪的事情,比如在editor.resetDirty()上调用editor#contentDom(为什么?)。此外,CKEditor不对属性进行排序,因为getSnapshot()做的唯一事情就是采用可编辑的innerHTML。因此,如果有任何东西对它的浏览器进行排序,如果他们这样做(我记得有些人随意这样做),那么你无能为力。

你需要从头开始。首先定义您想要实现的目标,并尽可能使用最少的代码执行此操作。我还建议你不要使用editor.checkDirty(),因为它是一种遗留方法,在特定情况下不起作用(是的,文档中缺少这种方法)。使用editor#change获取有关更改的实时通知,或直接比较editor.getData()