使用getData或beforeGetData事件修改CKEditor中的数据会导致旧数据

时间:2014-06-02 11:22:03

标签: ckeditor

我正在使用CUIditor 4.4.1和YUI。

YUI的一点是,如果你悬停,点击或与页面上的任何元素交互,它会为该元素生成并添加一个ID属性。

CKEditor的元素也是如此。

我需要做的是使用getData事件删除id属性。

我正在尝试删除id属性,如下所示:

editor.on('getData', function(e){

    e.editor.undoManager.lock();

    var ids = e.editor.element.find('[id]');

    for(i = 0; i < ids.count(); i++){
        ids.getItem(i).removeAttribute('id');
    }

    e.data.dataValue = e.editor.getData(true);
    e.editor.undoManager.unlock();
});

由于某种原因,似乎在事件处理程序中调用getData()没有获取最新版本的数据,而是在删除id属性之前生成数据。

<p>test
<a href="test.com">aaa</a>test2
<a href="sss.com">sss</a>test</p>
<p id="yui_3_16_0_1_1401707830563_1402">test asdf</p>
<p id="yui_3_16_0_1_1401707830563_1403">
  <a target="_blank" href="http://google.com">link</a>
</p>

我也尝试使用beforeGetData事件,但会出现同样的问题:

editor.on('beforeGetData', function(e){

    e.editor.undoManager.lock();

    var ids = e.editor.element.find('[id]');

    for(i = 0; i < ids.count(); i++){
        ids.getItem(i).removeAttribute('id');
    }

    e.editor.undoManager.unlock();
});

经过一些实验,我注意到以下几点:

  • getSnapshot()会返回最新数据,但也会导致一些问题,因为data-cke-saved-href等属性不会被删除。

  • 看起来getData()返回的数据会在发生更改后立即创建。因此,使用beforeGetDatagetData事件修改内容似乎不起作用。

无论如何确保getData()获取最新版本的数据?无论如何都要强制getData()更新其数据吗?

1 个答案:

答案 0 :(得分:-1)

尝试给出allowContent和disallowedContent选项的机会。请参阅http://docs.ckeditor.com/#!/guide/dev_disallowed_content

中的“如何允许一切除外...”