我正在使用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()
返回的数据会在发生更改后立即创建。因此,使用beforeGetData
和getData
事件修改内容似乎不起作用。
无论如何确保getData()
获取最新版本的数据?无论如何都要强制getData()
更新其数据吗?
答案 0 :(得分:-1)
尝试给出allowContent和disallowedContent选项的机会。请参阅http://docs.ckeditor.com/#!/guide/dev_disallowed_content
中的“如何允许一切除外...”