CKeditor:如何在保存时平衡HTML标签? (他们在负载上保持平衡)

时间:2018-06-06 10:24:15

标签: javascript javascript-events ckeditor ckeditor4.x

我一直遇到一些问题,有人可能会将代码从其他地方粘贴到CKeditor中,打开HTML标记,或者包括不应该关闭的标记。

我注意到当视图从Source更改为HTML时,标记是平衡的。因此,这会在加载时发生,并且在切换Source时,但不会在保存时发生。

要查看此操作,请查看来源,输入一些带有开放标记但没有匹配结束标记的HTML,查看HTML版本,查看来源 - 它已修复。

即使这意味着快速切换到Source然后再转换为HTML,如何在保存时触发此标记平衡?

2 个答案:

答案 0 :(得分:1)

我不确定它是否是正确的方法。当我检查Source按钮时,它调用一个函数CKEDITOR.tools.callFunction(52, this);

由于从HTML降价切换到预览模式,编辑器会自动关闭标记,在保存之前,您可以切换到预览模式以强制它关闭打开的标记。

var editor = CKEDITOR.replace( 'editor1', {} );

var isSourceOn = false;

function saveMyEditor() {
  if(isSourceOn)
    CKEDITOR.tools.callFunction(52, this);
}

editor.on('instanceReady', function( event ){    
  editor.on( 'mode', function( evt ){
    if(editor.mode != 'source') {
      isSourceOn = false;
    } else {
      isSourceOn = true;
    }
  });
});

Link to Codepen

修改 你能试试这个:

var editor = CKEDITOR.replace( 'editor1', {} );
editor.commands.source.exec();

正确切换源按钮。因此,在保存之前,您可以切换到实时预览然后保存。所以它会关闭标签。

答案 1 :(得分:0)

我认为最好的方法是在用户切换到源模式时禁用提交按钮。这样,您就可以在将数据发送到服务器之前避免模式之间的闪烁。请查看这个非常基本的codepen,以了解它是如何工作的。

var editor = CKEDITOR.replace( 'editor1', {

} );

editor.on('instanceReady', function( event ){
  var submitBut = document.getElementById('my-submit'),
      submitWarn = document.getElementById('submit-warn');

  editor.on( 'mode', function( evt ){
    if( editor.mode == 'source') {
      submitBut.disabled = true;
      submitWarn.style.display = 'inline';
    } else{
      submitBut.disabled = false;
      submitWarn.style.display = 'none';
    }          
  });
})

live preview on codepen