Ckeditor 选择所有文本而不删除h标记

Ckeditor 选择所有文本而不删除h标记,ckeditor,Ckeditor,我在CMS中使用内联共享CKEditor(版本4.5.7) 为了简化在页面生成器中编辑新元素,如果容器中的文本是虚拟文本,我将使用以下代码: editor.on( 'focus', function(ev) { if(obj.isDummyText($(ev.editor.element.$))) { ev.editor.execCommand( 'selectAll' ); } }); 问题是,如果容器有一个初始样式集,比如一个h标记,那么当您开始键入时,h标

我在CMS中使用内联共享CKEditor(版本4.5.7)

为了简化在页面生成器中编辑新元素,如果容器中的文本是虚拟文本,我将使用以下代码:

editor.on( 'focus', function(ev) {
    if(obj.isDummyText($(ev.editor.element.$))) {
        ev.editor.execCommand( 'selectAll' );
    }
});
问题是,如果容器有一个初始样式集,比如一个h标记,那么当您开始键入时,h标记会被剥离

我希望在元素中保持h标记,以便已经设置了初始样式,并且UX更好一些

我已尝试使用CKEDITOR.config修复此问题:

config.enterMode = CKEDITOR.ENTER_BR;
config.shiftEnterMode = CKEDITOR.ENTER_BR;
config.forcePasteAsPlainText = false;
CKEDITOR.dtd.$removeEmpty['i']  = false;
CKEDITOR.dtd.$removeEmpty['h1'] = false;
CKEDITOR.dtd.$removeEmpty['h2'] = false;
CKEDITOR.dtd.$removeEmpty['h3'] = false;
CKEDITOR.dtd.$removeEmpty['h4'] = false;
CKEDITOR.dtd.$removeEmpty['h5'] = false;
CKEDITOR.dtd.$removeEmpty['h6'] = false;
config.allowedContent = true;
遗憾的是,这并没有改变任何事情,当您开始键入时,h标记仍然会被剥离:

选择前:

选择时:

在我开始打字之后:



有没有办法解决这个问题?

我找到的解决方案是为
h4
元素的内容创建一个新的selectionRange(没有
h4
元素本身):

除了IE没有
setTimeout
功能外,该代码在所有浏览器上都非常有效,所以我添加了这个

下面是一个工作示例:

您能提供一个工作示例吗?添加了一个提琴:)您确定提琴显示了问题吗?我没有看到任何选择…这个问题只在firefox或IE中存在,只需单击文本并用ctrl+a选择所有文本,然后开始键入,您会看到h4标记被移除!!!然后捕获ctrl+a快捷键,同时还捕获一个keydown事件?因为快捷方式仍然选择所有你赢得的内部HTMLYOU,所以我一直在寻找一个解决方案:DGlad我可以帮忙。
editor.on('focus', function(ev) {
    setTimeout(function() {
    var element = element = ev.editor.document.getElementsByTag('h4').getItem(0).$;
    var textNode = element.childNodes[0];

    var startIndex = 0;
    var endIndex = textNode.length;

    var range = document.createRange();
    range.setStart(textNode, startIndex);
    range.setEnd(textNode, endIndex);

    var selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);
  }, 100);
})