在 CKEditor 3.0中关闭封闭的 < p > 标记

是否有可能关闭 CKEditor 3. x 中 < p >

内的所有书面内容的自动封闭?

我尽力了

  CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR;

但是这只是将内联换行符改为 < br/> ,同时保留附加的段落。

当前编写“ Test”将生成此输出

<p>
Test</p>

但我希望一切简单

Test

是否有这样的配置属性,或者其他内联编辑器更适合这种情况?

118947 次浏览

我正在做一件我并不引以为豪的事。在实际保存到数据库的 Python servlet 中,我这样做了:

if description.startswith('<p>') and description.endswith('</p>'):
description = description[3:-4]

CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR;-这对我来说是完美的。 你有没有试过清除你的浏览器缓存-这是一个问题有时。
您还可以使用 jQuery 适配器检查它:

<script type="text/javascript" src="/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="/js/ckeditor/adapters/jquery.js"></script>
<script type="text/javascript">
$(function() {
$('#your_textarea').ckeditor({
toolbar: 'Full',
enterMode : CKEDITOR.ENTER_BR,
shiftEnterMode: CKEDITOR.ENTER_P
});
});
</script>


根据@Tomkay 的评论更新:

自 CKEditor 版本3.6以来,如果您希望内联内容自动包装为 <p></p>之类的标签,您可以配置。这是正确的设置:

CKEDITOR.config.autoParagraph = false;

来源: Http://docs.cksource.com/ckeditor_api/symbols/ckeditor.config.html#.autoparagraph

if (substr_count($this->content,'<p>') == 1)
{
$this->content = preg_replace('/<\/?p>/i', '', $this->content);
}

找到了!

Js line # 91... search for

B.config.enterMode==3?'div':'p'

变成

B.config.enterMode==3?'div':''(不要 P!)

扔掉你的缓存,砰!

在 config.js 中尝试这样做

CKEDITOR.editorConfig = function( config )
{
config.enterMode = CKEDITOR.ENTER_BR;
config.shiftEnterMode = CKEDITOR.ENTER_BR;
};

在互联网上,人们已经注意到,将 config.enterMode 设置为 CKEDITOR.ENTER _ BR 会从 CKEditor 中删除包装段落标记。值得注意的是,设置更改了输入键的行为,以插入换行符而不是段落,这是不可取的。

参见: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode“建议使用 CKEDITOR.ENTER _ P 设置,因为它的语义值和正确性。”

但是,设置删除初始段落 config.auto ぃ琌可取的,因为它引入了“不可预测的可用性问题”,因为编辑器 真的需要一个顶级块元素。

见: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

奇迹发生在 wysiwygarea/plugin.js 第410行,编辑器根据 config.enterMode 选择默认的 block 元素。更改默认块元素的配置选项将允许我们从一个 div 开始,但是每次按下回车键时我们将继续获得更多的 div,除非我们通过菜单更改段落格式。

见: http://docs.cksource.com/ckeditor_api/symbols/src/plugins_wysiwygarea_plugin.js.html

通过后处理(在服务器或 CKEditor 的 getData 事件中)删除包装段落标记是可能的,但是这会导致我们陷入与禁用 auto 段落相同的问题: 没有顶级块。

我宁愿说没有一个好的解决方案,而是只有少量的半解决方案,也不愿意接受更改 config.enterMode 作为规范解决方案。

编辑源代码(或关闭富文本) ,并将 p 标记替换为 div。然后按照你喜欢的方式设计 div。

CkEditor 不会在下一次提交时添加任何包装器元素,因为这里已经有了 div。

(这解决了我的问题,我正在使用 Drupal,需要 HTML 的小片段,编辑器总是添加额外的,但其余时间我想包装 p 标签)。

把这个变成你的 config.js 文件代码

CKEDITOR.editorConfig = function( config ) {


//   config.enterMode = 2; //disabled <p> completely
config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER KEY input <br/>
config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
config.autoParagraph = false; // stops automatic insertion of <p> on focus
};

把这个变成你的 config.js 文件代码

CKEDITOR.editorConfig = function( config ) {


//   config.enterMode = 2; //disabled <p> completely
config.enterMode = CKEDITOR.ENTER_BR; // pressing the ENTER KEY input <br/>
config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
config.autoParagraph = false; // stops automatic insertion of <p> on focus
};

设置这样的配置:

    CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR
CKEDITOR.config.forcePasteAsPlainText = true

在 VS2015中,这样可以将 Enter 键转换成 <br>

myCKEControl.EnterMode = CKEditor.NET.EnterMode.BR

就个人而言,我不在乎我的结果文本只有 <br>而没有 <p>。效果非常好,看起来也是我想要的样子。到最后,还是成功了。

嗯,对于我在 laravel 中,使用 ckEditor,它使用简单的 strip_tags($var)函数输出,如下所示:

向另一个页面发送如下值: {!! strip_tags($six_answer) !!}

和/或在输出时使用相同的代码: {!! strip_tags($six_answer) !!}

结果如下,没有任何 <p>标记。 enter image description here