关闭CKEditor 3.0中的<p>标记


69

是否可以关闭CKEditor 3.x中<p> </ p>中所有书面内容的自动封装?

我试过了

  CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR;

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

当前正在编写“ Test”产生此输出

<p>
    Test</p>

但我希望它简单

Test

是否为此具有配置属性,或者是否有另一个内联编辑器更适合于此?


Answers:


98

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


10
我知道这已经被接受为正确的答案,但我认为这实际上是不正确的。这确实可以防止将内容包装在段落标签中,但是也可以防止在段落标签“应该”出现时生成段落标签,而是插入换行符。适当的解决方案可以防止默认的<p> </ p>,同时按Enter键仍将内容包装在段落中。
Michael Hellein'1

1
对于从直接javascript以外的其他地方获取其配置的用户:CKEDITOR.ENTER_BR的值为2。所以你也可以做enterMode: 2
莫里斯·

1
它对我而言并不完美:在BR失败后插入特殊字符并在Firefox中显示NS_ERROR_FAILURE
Damien

4
@MaksymilianMajer您可以配置它。参见:docs.cksource.com/ckeditor_api/symbols/…– Tomkay
2014年

1
@Tomkay在我编写答案时,您无法这样做。我将对其进行编辑以反映新的配置选项。
Maksymilian Majer,2014年

33

在整个互联网上,人们已经注意到将config.enterMode设置为CKEDITOR.ENTER_BR会从CKEditor中删除换行段落标签。值得注意的是,该设置更改了回车键的行为以插入换行符而不是段落,这是不希望的。

请参阅:http : //docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode “由于其语义值和正确性,建议使用CKEDITOR.ENTER_P设置。”

但是,用于删除该初始段落的config.autoParagraph也不建议使用,因为它引入了“不可预测的可用性问题”,因为编辑器确实需要顶层块元素。

请参阅:http : //docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

神奇之处发生在wysiwygarea / plugin.js,第410行,其中编辑器基于config.enterMode选择默认的块元素。更改默认块元素的配置选项将允许我们以div开头,但是每次按下Enter键我们将继续获得更多的div,除非我们通过菜单更改了段落格式。

请参阅:http : //docs.cksource.com/ckeditor_api/symbols/src/plugins_wysiwygarea_plugin.js.html

可以通过后处理(在服务器上或在CKEditor的getData事件中)删除包装的段落标签,但这使我们陷入与禁用autoParagraph相同的问题:没有顶级块。

我宁愿说这不是一个好的解决方案,而是少数半解,而不是接受将config.enterMode更改为规范的解决方案。


1
好答案。我不确定我是否愿意在这方面说几句话,但是有关配置选项,它们的含义等的摘要很好!Thanks1
Boaz Rymland 2012年

是的,我对自己的结论也很满意。这实际上是警告而不是解决方案!
Michael Hellein 2012年

1
所以... CKEditor在BR标签中看不到语义值吗?它们确实有目的,但是如果编辑器处于ENTER_P模式,则会将它们删除。
砖匠2012年

9

在config.js中尝试一下

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

5

找到了!

ckeditor.js第91行...搜索

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

改成

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

转储您的缓存和BAM!


5

制作您的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.ENTER_BR
星期一

2

我正在做一些我不感到骄傲的解决方法。在实际上保存到数据库的Python servlet中,我这样做:

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

6
但是,如果有多个段落,这不会导致类似的结果First paragraph</p><p>Second paragraph吗?
Max Nanasy

1

编辑源代码(或关闭富文本格式),然后将p标签替换为div。然后以任意方式设置div的样式。

ckEditor不会在下一次提交时添加任何包装元素,因为您已经在其中添加了div。

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


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

<code> if(substr_count($ this-> content,'<p>')== 1){$ temp = preg_replace(“ / <p> / i”,“”,$ this-> content); $ temp = preg_replace(“ / <\ / p> / i”,“”,$ temp); $ this-> content = $ temp; } </ code>
拉尔斯2010年

1

制作您的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
    };

0

设置这样的配置:

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

-1

在VS2015中,这可以将Enter键变成 <br>

myCKEControl.EnterMode = CKEditor.NET.EnterMode.BR

就我个人而言,我不在乎我的结果文本是否只有,<br>而没有<p>。它呈现完美,看起来就像我想要的那样。最后,它起作用了。


该答案不适用于通用CKEditor,仅在VS2015中有效。
Kosi2801

Kosi2801,这就是为什么我说“在VS 2015中”。我发布了这个答案,以防有人专门为VS2015寻找解决方案。当我特别声明该平台时,我不赞成投票否决。请修改您的投票。另外,请在投票前仔细阅读。
Joe Schmucker

Joe Schmucker,如果有人正在寻找VS2015解决方案,那么应该有一个单独的问题。您的答案与原始问题无关(如何在HTML编辑器CK 3.x中关闭<p>或是否可以使用其他用于网站的编辑器代替)。我确实非常仔细地阅读了您的答案,还研究了它是否可以以任何方式应用于网站的CKEditor 3.x,但由于它没有答案,因此没有用。因此,不赞成投票,也是我的评论。对于其他问题,请不要提供答案。
Kosi2801

我明白。我搜索了该问题的解决方案,然后找到了这篇文章。
Joe Schmucker

1
我没有看到这次旅行。我将通过它。感谢您抽出宝贵的时间来解释。我很感激。
Joe Schmucker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.