在我写的CKEditor插件中,我需要创建一个新的空段落。
我知道大多数浏览器都会折叠空段落(<p></p>
),这就是CKEditor对它们有一些特殊处理的原因:
<p> </p>
一个空段落(例如,当您按两次输入时)<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处理我的新段落,就像用户点击两次输入时会创建的任何其他空段一样?
我知道我也可以手动将
作为HTML内容插入新的DOM节点,但这有很大的不同 - 因为在这种情况下,空间确实出现在编辑区域,所以当用户输入内容时在新段落中,他必须手动删除不间断的空格。
答案 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 ] );