Javascript CKEditor中自定义自动关闭标记的问题
我有一个插件,可以在文本中插入标签Javascript CKEditor中自定义自动关闭标记的问题,javascript,html,ckeditor,Javascript,Html,Ckeditor,我有一个插件,可以在文本中插入标签。 它工作正常,结果是可以预期的,但在编辑器窗口中,转换为,包装下面的段落并妨碍进一步编辑 GIF- 有没有办法解决这个问题 CKEDITOR.plugins.add('pagecut', { lang: 'de,en,ru', onLoad: function(){ var css = ('display:block;clear:both;width:100%;border-top:#999 1px dotted;padding:0;height:1p
。
它工作正常,结果是可以预期的,但在编辑器窗口中,
转换为
,包装下面的段落并妨碍进一步编辑
GIF-
有没有办法解决这个问题
CKEDITOR.plugins.add('pagecut', {
lang: 'de,en,ru',
onLoad: function(){
var css = ('display:block;clear:both;width:100%;border-top:#999 1px dotted;padding:0;height:1px;cursor:default;');
var cssBefore = (
'content:"";' +
'background: url(' + CKEDITOR.getUrl( this.path + 'images/image.png' ) + ') no-repeat right center;' +
'height:14px;width:25px;position:relative;display:block;top:-8px;float:right;'
);
CKEDITOR.addCss( 'cut{' + css + '} cut:before{' + cssBefore + '}' );
},
init: function(editor) {
CKEDITOR.dtd['cut'] = {};
CKEDITOR.dtd.$empty['cut'] = 1;
CKEDITOR.dtd.$nonEditable['cut'] = 1;
CKEDITOR.dtd.$object['cut'] = 1;
editor.addCommand('insertPagecut', {
exec: function(editor) {
var element = CKEDITOR.dom.element.createFromHtml('<cut />');
editor.insertElement(element);
}
});
editor.ui.addButton('Pagecut', {
label: editor.lang.pagecut.toolbar,
command: 'insertPagecut',
icon: this.path + 'images/icon.png',
toolbar: 'links'
});
}
});
CKEDITOR.plugins.add('pagecut'{
朗:“德,恩,如”,
onLoad:function(){
var css=('display:block;clear:both;width:100%;border top:#999 1px虚线;padding:0;height:1px;cursor:default;');
var cssBefore=(
'内容:';'+
'背景:url('+CKEDITOR.getUrl(this.path+'images/image.png')+'))不重复右中心;'+
'高度:14px;宽度:25px;位置:相对;显示:块;顶部:-8px;浮动:右侧;'
);
addCss('cut{'+css+'}cut:before{'+cssBefore+'}');
},
init:函数(编辑器){
CKEDITOR.dtd['cut']={};
CKEDITOR.dtd.$empty['cut']=1;
CKEDITOR.dtd.$nonEditable['cut']=1;
CKEDITOR.dtd.$object['cut']=1;
editor.addCommand('insertPagecut'{
执行:函数(编辑器){
var element=CKEDITOR.dom.element.createFromHtml(“”);
编辑器.插入元素(元素);
}
});
editor.ui.addButton('Pagecut'{
标签:editor.lang.pagecut.toolbar,
命令:“insertPagecut”,
icon:this.path+'images/icon.png',
工具栏:“链接”
});
}
});
嗯,我肯定我在一些问题中对此进行了彻底的解释,但我找不到它,所以这里有另一种解释:D
在试图在CKEditor中编辑非HTML标记之前,必须了解两个重要事实:
contentEditable
实现高度不一致、不兼容且存在缺陷,因此,从一个版本到另一个版本,CKEditor会覆盖越来越多的本机行为。还不是全部(事实上——它永远不会覆盖全部,因为由于某些原因,这可能是灾难性的),但数量很大。例如,所有的输入键行为都是自定义的,在Webkit和Blink上,由于尚未解决的错误,编辑器在许多情况下处理退格和删除(并且,它实现自己的撤消系统,拦截粘贴和删除的内容,并执行自定义HTML插入)(我记得当我们实施它时,它关闭了大量的门票)等等
确保一致、可配置和功能强大的编辑体验的最大努力之一是。它内部充满了漏洞,但它向开发人员公开了一个干净且功能强大的界面,向最终用户公开了一个非常一致的行为。它允许实现“特殊的丰富内容单元,即在编辑器中作为单个实体处理的元素组”。因此,widgets系统具有封装部分内容并将其与浏览器隔离的能力在简短的介绍之后,我终于可以回答您的问题了。您需要将
标记实现为一个小部件。您已经很好地配置了DTD(您只是忘记了设置
元素可以存在的元素以及它更像块还是内联元素),因此解析器将接受它并将其作为空标记处理。现在您需要用小部件包装它,以便将其隔离,使其不会破坏编辑体验。这应该可以解决问题。此解决方案是否仍然有效,或者是否适用于其他版本?自从我回答第二个问题以来,情况发生了重大变化estion。我提到我们将在CKEditor 4.1中介绍小部件,并给出如何在没有它的情况下处理问题的答案。在这里,我将进一步解释一般问题,并将我的故事介绍给point小部件作为正确的解决方案:)。但最重要的是,这两个问题都非常具体-需要问一个一般性的问题。@Reinmar是否应该有单独的标签来帮助识别4.1之前/之后的特定问题,因为答案会因版本而异?我觉得没有必要。4.0、4.1、4.3、4.5 is g中有重大更新太大了,一切都改变了,所以它会改变