CKEditor插入空段

问题描述 投票:-1回答:1

在我写的CKEditor插件中,我需要创建一个新的空段落。

我知道大多数浏览器都会折叠空段落(<p></p>),这就是CKEditor对它们有一些特殊处理的原因:

  • 显示HTML源时,CKEditor会为空段显示<p>&nbsp;</p>(例如,当您按两次输入时)
  • 根据浏览器的不同,在编辑区域中,CKEditor会使用另一个占位符填充段落。例如,在Mozilla Firefox中,它会在段落中插入<br type="_moz" />

但是,当手动插入p DOM节点(使用CKEditor dom对象)时,将省略此特殊处理。但是,当我切换到源视图和返回编辑模式时,它会神奇地出现。

我试过了:

var new_p = new CKEDITOR.dom.element('p');
editor.insertElement(new_p);

和:

var new_p = new CKEDITOR.dom.element.createFromHtml('<p></p>');
editor.insertElement(new_p);

并且:

editor.insertHtml('<p>');

但是没有对空段进行特殊处理。我得到一个空段落,但由于浏览器正在折叠它,我无法正确查看或编辑其内容。

当来回切换到源代码视图时,CKEditor会检测空段并插入填充符。在提交数据时也是如此。但是我需要在插入新节点时立即显示填充符。

我如何让CKEditor处理我的新段落,就像用户点击Enter两次时会创建的任何其他空段一样?

我知道我也可以手动将&nbsp;作为HTML内容插入新的DOM节点,但这是一个巨大的差异 - 因为在这种情况下,空间确实出现在编辑区域,所以当用户在新段落中输入内容时,他必须手动删除不间断空格。

dom ckeditor
1个回答
0
投票

在研究了CKEditor如何处理内部按下[ENTER]后,我找到了这个解决方案:

var new_node = new CKEDITOR.dom.element( 'p' );

// insert UTF-16 non-breaking space
var dummy = editor.document.createText( '\u00A0' );
dummy.appendTo( new_node );
editor.insertElement(new_node);

// move cursor to beginning of new element
var range = editor.createRange();
range.moveToPosition( new_node, CKEDITOR.POSITION_AFTER_START );
editor.getSelection().selectRanges( [ range ] );
© www.soinside.com 2019 - 2024. All rights reserved.