CKEditor插入空段

时间:2013-11-13 21:32:08

标签: dom ckeditor

在我写的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处理我的新段落,就像用户点击两次输入时会创建的任何其他空段一样?

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

1 个答案:

答案 0 :(得分: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 ] );