Javascript CKeditor:如何在保存时平衡HTML标记?(它们在负载上保持平衡)
我曾经遇到过这样的问题:有人可能会将其他地方的代码粘贴到CKeditor中,留下打开的HTML标记,或者包含不应该存在的关闭标记 我注意到,当视图从源代码更改为HTML时,标记是平衡的。所以这是在加载时发生的,在切换源代码时发生的,而不是在保存时发生的 要查看此操作,请查看源代码,输入一些带有打开标记但没有匹配关闭标记的HTML,查看HTML版本,查看源代码-它是固定的Javascript CKeditor:如何在保存时平衡HTML标记?(它们在负载上保持平衡),javascript,ckeditor,ckeditor4.x,Javascript,Ckeditor,Ckeditor4.x,我曾经遇到过这样的问题:有人可能会将其他地方的代码粘贴到CKeditor中,留下打开的HTML标记,或者包含不应该存在的关闭标记 我注意到,当视图从源代码更改为HTML时,标记是平衡的。所以这是在加载时发生的,在切换源代码时发生的,而不是在保存时发生的 要查看此操作,请查看源代码,输入一些带有打开标记但没有匹配关闭标记的HTML,查看HTML版本,查看源代码-它是固定的 即使这意味着快速切换到源代码,然后切换到HTML,如何在保存时触发此标记平衡?我认为最好的方法是在用户切换到源代码模式时禁用提
即使这意味着快速切换到源代码,然后切换到HTML,如何在保存时触发此标记平衡?我认为最好的方法是在用户切换到源代码模式时禁用提交按钮。这样,您将避免在向服务器发送数据之前在模式之间闪烁。请看这个非常基本的代码笔,了解它是如何工作的
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';
}
});
})
我不确定这是不是正确的方法。当我检查
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;
}
});
});
编辑:
你能试试这个吗
var editor = CKEDITOR.replace( 'editor1', {} );
editor.commands.source.exec();
它正在正确切换源按钮。因此,在保存之前,您可以切换到实时预览,然后保存。所以它会关闭标签。但我不想禁用源模式。我需要在两种模式下都启用“保存”按钮。有没有办法切换回预览模式?对不起,我的意思是禁用提交按钮而不是源按钮。我已经编辑了我的评论。请考虑我所写的,因为当HTML可能无效时,允许在源模式中保存是没有意义的。保存前在模式之间闪烁也比在源模式下禁用提交按钮更糟糕。请至少考虑一下。禁用保存按钮不符合我的要求。CKEditor的任何用于解析最终文本的HTML解析器函数?我试过了,但不起作用。不,你需要处于所见即所得模式,这些功能才能工作。他们需要一个在源代码模式下不可用的文档(只有纯文本区)。52在这里指的是什么?“此”是否具有当前窗口的范围?为什么我们需要窗口的当前引用?我在devtools中检查了源代码,源按钮的点击是这样绑定的。52只是它存储的函数的数组索引。在那个页面中,CKEDITOR是全局范围的,我想这就是为什么他们可以使用“this”。无论如何,onclick函数只接受一个参数(参见图->),因此我认为我们不需要在这里传递'this'。在我的代码中,它有索引3。所以索引取决于CKEditor实例或CKEditor版本?看起来它取决于该页面和按钮中实例的数量。如果可能的话,试着联系他们的支持,或者在GitHub中,如何模拟源代码按钮的点击。在普通js中,var link=document.querySelector(“#cke_33”);link.click()还会单击查询的元素。因此,您可以选择锚定标记并调用click函数,同样,我们需要知道源按钮的id。